r-使用列表聚合的条件平均

r-使用列表聚合的条件平均,r,R,我试图编写一个脚本来简化一些数据分析,在某个时候,我需要对一些子列表进行平均,这些子列表类似于: > temp1[[1]] Replicate Week Treatment aaa bbb ccc ddd eee C1_T0 1 0 Cold 1 2 3 4 5 C2_T0 2 0 Cold 1 2 3 4 5 C3_T0 3 0 Cold

我试图编写一个脚本来简化一些数据分析,在某个时候,我需要对一些子列表进行平均,这些子列表类似于:

> temp1[[1]]
      Replicate Week Treatment aaa bbb ccc ddd eee
C1_T0         1    0      Cold   1   2   3   4   5
C2_T0         2    0      Cold   1   2   3   4   5
C3_T0         3    0      Cold   1   2   3   4   5
C4_T0         4    0      Cold   1   2   3   4   5
H1_T0         1    0       Hot   1   2   3   4   5
H2_T0         2    0       Hot   1   2   3   4   5
H3_T0         3    0       Hot   1   2   3   4   5
H4_T0         4    0       Hot   1   2   3   4   5
为此,我尝试使用To aggregate函数将所有其他列的平均值作为处理列的函数,但这只对第一列成功,然后返回绝对不是平均值的数字

> temp10 <- aggregate( . ~ Treatment, temp1[[1]], mean)
> temp10
  Treatment Replicate Week aaa bbb ccc ddd eee
1      Cold       2.5    1   1   1   1   1   1
2       Hot       2.5    1   1   1   1   1   1
>temp10 temp10
治疗重复周aaa bbb ccc ddd eee
1冷2.51
2热2.5 1

通过治疗,它正确地返回了复制列中的平均值,但我不太清楚为什么在那之后它会返回不同的结果。我猜这个数据结构可能与均值函数不兼容,但我不确定为什么复制均值是正确的。有没有更好的方法在列表中执行这种类型的条件平均,或者最好尝试将所有内容重新构造为数据帧?

可能您的列都是
因子
,而不是
数值
,在进行此类计算之前,您应该始终检查
数据.frame
列的类别,因为,不幸的是,
aggregate
不会警告您它采用了因子的方法(这可能毫无意义)

要了解发生了什么,请查看在数字中转换因子时发生的情况:

as.numeric(as.factor(c(10, 10, 10, 10)))
[1] 1 1 1 1
那么,重现你的问题:

df <- read.table(text = "Replicate Week Treatment aaa bbb ccc ddd eee
C1_T0         1    0      Cold   1   2   3   4   5
C2_T0         2    0      Cold   1   2   3   4   5
C3_T0         3    0      Cold   1   2   3   4   5
C4_T0         4    0      Cold   1   2   3   4   5
H1_T0         1    0       Hot   1   2   3   4   5
H2_T0         2    0       Hot   1   2   3   4   5
H3_T0         3    0       Hot   1   2   3   4   5
H4_T0         4    0       Hot   1   2   3   4   5", header = TRUE)

df[-1] <- lapply(df[-1], as.factor)
temp10 <- aggregate( . ~ Treatment, df, mean)
temp10
  Treatment Replicate Week aaa bbb ccc ddd eee
1      Cold       2.5    1   1   1   1   1   1
2       Hot       2.5    1   1   1   1   1   1

可能您的列都是
因子
,而不是
数值
,您应该始终检查
数据的类别。在进行此类计算之前,请先框显
列,因为不幸的是,
聚合
不会警告您它采用了因子的方式(这可能根本没有意义)

要了解发生了什么,请查看在数字中转换因子时发生的情况:

as.numeric(as.factor(c(10, 10, 10, 10)))
[1] 1 1 1 1
那么,重现你的问题:

df <- read.table(text = "Replicate Week Treatment aaa bbb ccc ddd eee
C1_T0         1    0      Cold   1   2   3   4   5
C2_T0         2    0      Cold   1   2   3   4   5
C3_T0         3    0      Cold   1   2   3   4   5
C4_T0         4    0      Cold   1   2   3   4   5
H1_T0         1    0       Hot   1   2   3   4   5
H2_T0         2    0       Hot   1   2   3   4   5
H3_T0         3    0       Hot   1   2   3   4   5
H4_T0         4    0       Hot   1   2   3   4   5", header = TRUE)

df[-1] <- lapply(df[-1], as.factor)
temp10 <- aggregate( . ~ Treatment, df, mean)
temp10
  Treatment Replicate Week aaa bbb ccc ddd eee
1      Cold       2.5    1   1   1   1   1   1
2       Hot       2.5    1   1   1   1   1   1

看起来您的所有列都是因子。检查
sapply(temp1[[1]],class)
。您可能想将它们转换为整数。看起来所有列都是因子。检查
sapply(temp1[[1]],class)
。你可能想把它们转换成整数。