我有一个记录重复测量数据的数据框(X4),第2列中的第1列中的一组样本以及第3和第3列中重复测量的次数。
head(df1)
col1 col2 rep
1 AE01 0.20 1
2 AE01 0.28 2
3 AE01 0.52 3
4 AE01 0.02 4
5 AE02 0.19 1
6 AE02 0.40 2
我想制作一个新的矩阵/数据框,它可以获得每个复制测量四个重复的四个重复项的平均值。我的尝试如下:
df2<-cbind(unique(df1$col1), apply(df1$col2[seq(1, length(df1$col2), 4)], 1, mean))
我收到以下错误:
Error in apply(df1$col2[seq(1, length(df1$col2), 4)], 1, mean) :
dim(X) must have a positive length
这可能是因为我必须使用&#39; na.omit&#39;从数据集中删除NA值。较早,因此第1栏中记录的每个样品可能不会有4个重复...
如果每个样品的步长均不均匀,我如何得到每个样品的平均值?
预期产出:
sample calculated_average_of_each_quadruplet_of_col2_values
1 AE01 0.255
2 AE02 0.295
答案 0 :(得分:2)
使用library(data.table)
setDT(df1) # convert to data table by reference
df1[, .(mean_col2 = mean(col2, na.rm = TRUE)), by = col1]
我的方法是
col1 mean_col2
1: AE01 0.255
2: AE02 0.295
结果:
df[np.where(df['Count']==1)[0][0]:]
答案 1 :(得分:2)
如果没有进一步的导入,可以使用许多包含的函数来完成,例如tapply或aggregate:
aggregate(df1$col2, by=list(df1$col1), function(x) mean(x, na.rm=TRUE))
结果
Group.1 x
1 AE01 0.255
2 AE02 0.295
如果你想要一个向量或一个列表作为你的结果,请使用tapply
> tapply(df1$col2, df1$col1, function(x) mean(x, na.rm=TRUE))
AE01 AE02
0.255 0.295
答案 2 :(得分:2)
我们可以使用dplyr
library(dplyr)
df1 %>%
group_by(col1) %>%
summarise(mean_col2 = mean(col2, na.rm = TRUE))
# col1 mean_col2
# <chr> <dbl>
#1 AE01 0.255
#2 AE02 0.295