我再次咨询你的智慧。
我有2个格式的数据框:
**data1sample**
ID value
water 3
water 5
fire 1
fire 3
fire 2
air 1
**data2controls**
ID value
water 1
fire 3
air 5
我想使用控制数据框(data2controls)中的值,并知道样本分布中的相应百分位数(data1sample)。我必须按照他们的ID对每个样本进行分类(意思是对火样本进行火控,对水进行防火等),但我还没有能够这样做。
我正在使用命令:
mean(data1sample[data1sample$ID == data2controls$ID,] <= data2controls$value)
但我收到了错误
In Ops.factor(left, right) : ‘<=’ not meaningful for factors
我所追求的基本上是dataframe2中基于dataframe1样本计算的值的百分位数(我试图获得百分位数的百分位数=平均值(data1sample $ value(按ID)&lt; = dataframe2 $ value ))
这样的事情:
**data2controls**
ID value percentile(based on data1 sample values)
water 1 .30
fire 3 .14
air 5 .1
请忽略百分位数值,它们只是用于显示所需的输出。
如果有人能帮助我,我会爱上你!谢谢!
答案 0 :(得分:0)
没有所需的输出很难回答,但我会在这里猜测:
library(dplyr)
data1sample <- data.frame(ID = c("water", "water", "fire", "fire", "fire", "air"), value = c(3,5,1,3,2,1))
data2sample <- data.frame(ID = c("water", "fire", "air"), value = c(1,3,5))
by_ID <- data1sample %>% group_by(ID) %>% summarise(control = mean(value))
data2sample %>% inner_join(by_ID)
#> Joining, by = "ID"
#> ID value control
#> 1 water 1 4
#> 2 fire 3 2
#> 3 air 5 1
答案 1 :(得分:0)
这给出了我认为您之后的结果?
for(i in d2$ID){
x <- mean(d1[d1$ID == i & d1$value <= d2[d2$ID == i, 'value'], 'value'])
print(x)
}
根据您提供的数据,它返回水的NaN,因为没有符合您标准的水,所以div为0