按照楼上的意思,我假设了一个数据,并且编了一些代码计算 ratio:
<br />
x <- gl(n = 3, k = 100, labels = c("one", "two", "three"))<br />
y <- sample(x = c(0, 1), 300, replace = TRUE)<br />
z <- rnorm(n = 300)<br />
mydata <- data.frame(x = x, y = y, z = z)<br />
mydata<br />
mydata1 <- subset(x = mydata, subset = (y != 0))<br />
library(plyr)<br />
med1 <- ddply(mydata1, .(x), summarise, med1 = median(z))<br />
med2 <- ddply(mydata, .(x), summarise, med2 = median(z))<br />
med <- join(med1, med2, by = "x")<br />
ratio <- mutate(med, ratio = med1 / med2)<br />
ratio<br />
计算的 ratio 结果如下:
<br />
> ratio<br />
x med1 med2 ratio<br />
1 one -0.3728175 -0.193804968 1.9236738<br />
2 two -0.1098863 -0.150472621 0.7302747<br />
3 three 0.1312945 0.006920094 18.9729420<br />
虽然效率不高,但是能够计算出结果。根据以上的命令,我试着编了一个函数如下:
<br />
med_ratio <- function(data, group, var, value, subset) {<br />
require(plyr)<br />
data1 <- subset(x = data, subset = subset)<br />
med1 <- ddply(data1, .(group), summarise, med1 = median(z))<br />
med2 <- ddply(data, .(group), summarise, medw = median(z))<br />
med <- join(med1, med2, by = quote(group))<br />
ratio <- mutate(med, ratio = med1 / med2)<br />
ratio<br />
}<br />
但是在使用这个函数的时候总是出现问题。水平有限,找不到问题在哪。
<br />
med_ratio(data = mydata, group = x, var = y, value = z, subset = (y != 0))<br />
#错误于as.vector(x, mode) :<br />
#cannot coerce type 'symbol' to vector of type 'any'<br />
应该是参数传递出了毛病。请高手帮我一下怎么解决。
</p>