我有两个向量:
x <- c(1,1,1,1,1, 2,2,2,3,3, 3,3,3,4,4, 5,5,5,5,5 )
y <- c(2,2,1,3,2, 1,4,2,2,NA, 3,3,3,4,NA, 1,4,4,2,NA)
在这里(Conditional calculating the numbers of values in column with R)讨论了当X被群体激活时如何在Y和X中找到x的值的平均值的问题:
if x<=2, group I
if 2<x<=3, group II
if 3<X<=5, group III
最佳解决方案由@ Mike.Gahan提供:
#Bring in data.table library
require(data.table)
data <- data.table(x,y)
#Summarize data
data[,list(x=mean(x,na.rm=T)),by=list(y,x.grp=cut(x,c(-Inf,2,3,5,Inf)))] [order(y,x.grp)]
但是这个解决方案并没有在结果中放置带有NA的行。
有人知道如何输出结果中的所有行,包括NA的行吗?
现在输出是:
y x.grp x
1: 1 (-Inf,2] 1.500000
2: 1 (3,5] 5.000000
3: 2 (-Inf,2] 1.250000
4: 2 (2,3] 3.000000
5: 2 (3,5] 5.000000
6: 3 (-Inf,2] 1.000000
7: 3 (2,3] 3.000000
8: 4 (-Inf,2] 2.000000
9: 4 (3,5] 4.666667
10: NA (2,3] 3.000000
11: NA (3,5] 4.500000
其中X是每组X和X的数字的平均值
答案 0 :(得分:0)
答案是:
setkey(result, y, x.grp)
result[CJ(unique(y), unique(x.grp))]
感谢@eddi!