R - 是否有有效的方法来执行此重复性任务?
R - are there efficient ways to perform this repetitive task?
使用 R,我正在尝试创建一个包含多个列的均值列,如下所示。有什么有效的方法来执行这种重复性任务吗?
df$c1mean = rowMeans(subset(df, select = c1_1:c1_5), na.rm = TRUE)
df$c2mean = rowMeans(subset(df, select = c2_1:c2_5), na.rm = TRUE)
df$c3mean = rowMeans(subset(df, select = c3_1:c3_5), na.rm = TRUE)
df$c4mean = rowMeans(subset(df, select = c4_1:c4_5), na.rm = TRUE)
df$c5mean = rowMeans(subset(df, select = c5_1:c5_5), na.rm = TRUE)
我们可以使用 lapply
遍历从 1 到 5 的序列,使用 seq
创建从该值到 5 的序列,paste
'c', select 'df' 的列,应用 rowMeans
,并将输出分配 (<-
) 回新列
df[paste0("c", 1:5, "mean")] <- lapply(1:5, function(i)
rowMeans(df[paste0("c", i, "_", i:5)], na.rm = TRUE))
这可以通过 grep
来完成
nm1 <- paste0("c", 1:5)
df[paste0(nm1, "mean")] <- lapply(nm1, function(nm)
rowMeans(df[grep(nm, names(df))], na.rm = TRUE)))
使用 R,我正在尝试创建一个包含多个列的均值列,如下所示。有什么有效的方法来执行这种重复性任务吗?
df$c1mean = rowMeans(subset(df, select = c1_1:c1_5), na.rm = TRUE)
df$c2mean = rowMeans(subset(df, select = c2_1:c2_5), na.rm = TRUE)
df$c3mean = rowMeans(subset(df, select = c3_1:c3_5), na.rm = TRUE)
df$c4mean = rowMeans(subset(df, select = c4_1:c4_5), na.rm = TRUE)
df$c5mean = rowMeans(subset(df, select = c5_1:c5_5), na.rm = TRUE)
我们可以使用 lapply
遍历从 1 到 5 的序列,使用 seq
创建从该值到 5 的序列,paste
'c', select 'df' 的列,应用 rowMeans
,并将输出分配 (<-
) 回新列
df[paste0("c", 1:5, "mean")] <- lapply(1:5, function(i)
rowMeans(df[paste0("c", i, "_", i:5)], na.rm = TRUE))
这可以通过 grep
nm1 <- paste0("c", 1:5)
df[paste0(nm1, "mean")] <- lapply(nm1, function(nm)
rowMeans(df[grep(nm, names(df))], na.rm = TRUE)))