R 跨数据表的列聚合

R 跨数据表的列聚合,r,data.table,R,Data.table,我有一个看起来像 ID1 ID2 ID3 X1 X2 X3 X4 X5 .... E01 ASD DSA 9 2 1 22 4 E03 SDF FDX 21 9 0 10 2 E04 MAX XXX 77 2 .5 23 1.5 .. 对于每个ID1(保持ID2和ID3不变),我想计算Xx的不同子群的平均值,输出应该如下 ID1 ID2 ID3 av_X1_X3 av_X4_X5 ... E01 ASD DSA 4 13 ... E03 SDF F

我有一个看起来像

ID1 ID2 ID3 X1 X2 X3 X4 X5 ....
E01 ASD DSA 9  2  1  22 4
E03 SDF FDX 21 9  0  10 2
E04 MAX XXX 77 2  .5 23 1.5 ..
对于每个ID1(保持ID2和ID3不变),我想计算Xx的不同子群的平均值,输出应该如下

ID1 ID2 ID3 av_X1_X3 av_X4_X5   ...
E01 ASD DSA 4        13         ...
E03 SDF FDX 10       6

Xx的范围从X0到X90,我需要能够轻松地输入三到五个可能的Xx分组。

您没有提到如何定义子分组。如果您打算为每个子组手动执行此操作,那么输入起来应该不会太困难

s <- "ID1 ID2 ID3 X1 X2 X3 X4 X5
E01 ASD DSA 9  2  1  22 4
E03 SDF FDX 21 9  0  10 2
E04 MAX XXX 77 2  .5 23 1.5"

dt <- fread(s)
dt[, av_X1_X3 := mean(c(X1, X3)), by = ID1]

您没有提到如何定义子组。如果您打算为每个子组手动执行此操作,那么输入起来应该不会太困难

s <- "ID1 ID2 ID3 X1 X2 X3 X4 X5
E01 ASD DSA 9  2  1  22 4
E03 SDF FDX 21 9  0  10 2
E04 MAX XXX 77 2  .5 23 1.5"

dt <- fread(s)
dt[, av_X1_X3 := mean(c(X1, X3)), by = ID1]

为什么
av_X1_X3
4在第一行?不是5?9+2+1=12/3=4?为什么
av_X1_X3
4在第一行?不是5?9+2+1=12/3=4?谢谢!这将是手动的,我可以在j中插入这样的定义列表吗?例如:dt[,(av_X1_X3:=mean(c(X1,X3)),av_X4_X5:=mean(c(X4,X5)),by=ID1)当然可以,但语法会有点不同。请参见答案中的编辑。@ThreeDiag抱歉,我不太确定您要进行的编辑
av_X1_X3=mean(c(X1,X2,X3))
如果你想要av_X1_X2_X3,那没关系,但变量名确实应该与其含义相匹配。从概念上讲,在这个答案中使用X1_X2或X1_X2_X3没有太大区别,因为你问的是一般方法而不是具体结果。正如示例所暗示的那样,这就是我想要做的,因为我在寻找一种方法to获得X1到X3的COL的平均值。无论如何,这是一件小事。此外,sintax dt[,av_X1_X3:=mean(X1:X3),by=ID1]也能满足我的要求(对于较长的COL序列).好的,明白了。我建议使用变量名,比如
av_X1_to_X3
。谢谢!这将是手动的,我可以在j中插入这样的定义列表吗?例如:dt[,(av_X1_X3:=平均值(c(X1,X3)),av_X4_X5:=平均值(c(X4,X5))),by=ID1)当然可以,但语法会有点不同。请参见回答中的编辑。@ThreeDiag抱歉,我不太确定您要进行的编辑
av_X1_X3=mean(c(X1,X2,X3))
如果你想要av_X1_X2_X3,那没关系,但变量名确实应该与其含义相匹配。从概念上讲,在这个答案中使用X1_X2或X1_X2_X3没有太大区别,因为你问的是一般方法而不是具体结果。正如示例所暗示的那样,这就是我想要做的,因为我在寻找一种方法to得到从X1到X3的col的平均值。无论如何,这是一件小事。另外,sintax dt[,av_X1_X3:=mean(X1:X3),by=ID1]也做了我想要的事情(对于更长的col序列)。好了。我建议使用变量名,比如
av_X1_to_X3