Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 按辅助数据帧分组_R_Grouping - Fatal编程技术网

R 按辅助数据帧分组

R 按辅助数据帧分组,r,grouping,R,Grouping,我有两个数据帧,其结构与示例中的结构相似: types=data.frame(t(data.frame(A=sample(c("T1", "T2"), 20, replace = TRUE), B=sample(c("A", "B", "C", "D"), 20, replace=TRUE)))) num_df=data.frame(replicate(20,sample(0

我有两个数据帧,其结构与示例中的结构相似:

types=data.frame(t(data.frame(A=sample(c("T1", "T2"), 20, replace = TRUE), B=sample(c("A", "B", "C", "D"), 20, replace=TRUE))))

num_df=data.frame(replicate(20,sample(0:1,30,rep=TRUE)))

> types
  X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20
A T2 T2 T2 T1 T1 T2 T2 T1 T1  T2  T2  T2  T1  T1  T1  T2  T1  T1  T1  T2
B  A  B  B  C  B  D  D  A  B   D   C   D   A   A   C   C   A   A   D   B

> head(num_df)
  X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20
1  1  1  1  1  0  0  1  1  0   0   0   0   0   1   0   1   1   1   1   1
2  1  1  1  0  1  0  1  0  0   1   1   1   0   1   1   1   1   1   1   1
3  0  1  0  0  0  1  0  0  0   0   1   0   0   1   1   0   0   1   0   0
4  0  0  0  1  0  0  0  1  0   0   1   1   0   0   0   0   1   0   1   0
5  0  0  1  0  0  1  0  1  1   1   1   1   1   1   1   0   0   0   0   1
6  1  0  0  1  1  0  0  1  0   0   0   0   0   1   0   1   0   1   1   0
“类型”的每一列都指num_df的一列。 我需要获得另一个数据帧,在该数据帧中,我使用类型中的变量来平均num_df的列。例如,我想获得num_df的所有列的平均值,其中类型为“T1”和“A”(然后继续计算所有其他组合)

一种可能的方法是使用两个for循环并更改引号中的各种变量,如:

rowMeans( num_df[, colnames(num_df)[types[1,]=="T1" & types[2,]=="A"] ])
但我认为有一个更优雅的解决方案。也许用dplyr?组员


有人能帮忙吗?

我不确定这是否有帮助

as.data.frame(
  lapply(
    split.default(types, do.call(paste, asplit(types, 1))),
    function(v) rowMeans(num_df[names(v)])
  )
)
这使得输出像

        T1.A T1.B      T1.C      T1.D T2.A T2.B      T2.C T2.D
1  1.0000000  0.0 0.8333333 0.3333333    1    1 0.6666667    0
2  0.0000000  0.0 0.6666667 0.3333333    0    0 0.3333333    0
3  0.3333333  0.5 0.6666667 0.6666667    1    0 0.3333333    1
4  0.3333333  0.5 0.3333333 0.3333333    1    0 0.6666667    0
5  0.6666667  0.5 0.5000000 1.0000000    0    1 0.6666667    0
6  0.3333333  0.5 0.3333333 0.3333333    0    0 0.6666667    1
7  0.0000000  1.0 0.5000000 0.3333333    0    1 0.6666667    0
8  0.6666667  0.5 0.8333333 0.6666667    1    0 0.3333333    1
9  0.6666667  0.0 0.6666667 0.6666667    1    0 0.6666667    0
10 0.0000000  0.5 0.3333333 1.0000000    0    1 0.6666667    1
11 0.0000000  0.5 0.5000000 0.0000000    1    1 0.6666667    1
12 0.3333333  0.5 0.1666667 0.6666667    1    1 1.0000000    1
13 0.3333333  0.5 0.3333333 0.6666667    0    0 0.3333333    0
14 1.0000000  0.5 0.5000000 0.6666667    0    1 0.6666667    1
15 0.3333333  0.5 0.3333333 1.0000000    1    1 0.6666667    0
16 0.6666667  0.5 0.8333333 0.0000000    1    0 0.6666667    1
17 0.0000000  0.5 0.3333333 0.0000000    0    1 0.6666667    1
18 0.3333333  0.0 0.3333333 0.6666667    0    0 0.6666667    0
19 0.6666667  1.0 0.5000000 0.3333333    0    0 1.0000000    0
20 0.6666667  1.0 0.5000000 0.3333333    1    0 0.3333333    0
21 1.0000000  0.5 0.1666667 0.6666667    1    1 0.3333333    0
22 0.3333333  0.5 0.1666667 0.6666667    1    1 0.3333333    0
23 0.0000000  0.5 0.5000000 0.6666667    0    0 0.3333333    1
24 1.0000000  0.5 0.3333333 0.0000000    0    1 0.6666667    0
25 1.0000000  0.5 0.6666667 0.3333333    1    0 0.3333333    0
26 0.6666667  0.5 0.3333333 0.3333333    1    0 0.6666667    0
27 0.3333333  0.5 0.3333333 0.6666667    1    1 0.6666667    1
28 0.0000000  1.0 0.6666667 0.6666667    0    0 0.0000000    1
29 0.6666667  0.5 0.5000000 0.3333333    0    0 0.3333333    1
30 0.6666667  0.5 0.6666667 0.3333333    0    0 0.3333333    0

为什么你问了两次这个问题?连接问题,我觉得我的第一次提交不起作用。。。很抱歉我将删除其中一个问题,这是一个非常好的答案。是的,确实有用。只要加上“as.data.frame”,我想我就得到了我想要的结果。然后用rowMeans更改行和。