在另一个数据框中按值组获取数据框的均值

时间:2017-01-19 16:03:51

标签: r dataframe mean

我再次咨询你的智慧。

我有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

请忽略百分位数值,它们只是用于显示所需的输出。

如果有人能帮助我,我会爱上你!谢谢!

2 个答案:

答案 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