以不均匀的步骤将函数应用于数据框
applying function to data frame in uneven steps
我有一个数据框记录了第 2 列中第 1 列中一组样本的重复测量值 (X4),以及第 3 列中重复测量的次数 - 'rep'。
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
我想制作一个新的 matrix/data 框架,以获取每个四组重复测量的四个重复中的每一个的平均值。我的尝试如下:
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
这可能是因为我之前必须使用 'na.omit' 从数据集中删除 NA 值,因此第 1 列中记录的每个样本可能没有 4 个重复...
如果每个样本的步长不均匀,我如何获得每个样本的平均值?
预期输出:
sample calculated_average_of_each_quadruplet_of_col2_values
1 AE01 0.255
2 AE02 0.295
对于 data.table
我的方法是
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
无需进一步导入,这可以使用许多包含的函数来完成,例如 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
我们可以使用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
我有一个数据框记录了第 2 列中第 1 列中一组样本的重复测量值 (X4),以及第 3 列中重复测量的次数 - 'rep'。
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
我想制作一个新的 matrix/data 框架,以获取每个四组重复测量的四个重复中的每一个的平均值。我的尝试如下:
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
这可能是因为我之前必须使用 'na.omit' 从数据集中删除 NA 值,因此第 1 列中记录的每个样本可能没有 4 个重复...
如果每个样本的步长不均匀,我如何获得每个样本的平均值?
预期输出:
sample calculated_average_of_each_quadruplet_of_col2_values
1 AE01 0.255
2 AE02 0.295
对于 data.table
我的方法是
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
无需进一步导入,这可以使用许多包含的函数来完成,例如 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
我们可以使用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