R中具有相同列模式的多个数据帧的平均值
Average of multiple data frames in R having same column pattern
我有多个数据框或文件,我想得到每个 data-frame 中列的平均值并将它们写回。
我所有数据帧的模式。这就是我所有文件的命名方式 header.
names(WGCNA_avg_gene)
[1] "Family" "Symbol" "C1_S1_S7" "C1_S3_S9" "C2_S1_S10" "C2_S2_S11" "C3_S1_S13" "C3_S2_S14" "C3_S3_S15"
[10] "C4_S1_S16" "C4_S2_S17" "C4_S3_S18" "C5_S1_S19" "C5_S2_S20" "C5_S3_S21" "C6_S1_S22" "C6_S2_S23" "C6_S3_S24"
现在我做的就是这样
WGCNA_avg_gene <- e %>% mutate(C1 = rowMeans(.[grep("C1", names(.))]),
C2 = rowMeans(.[grep("C2", names(.))]),
C3 = rowMeans(.[grep("C3", names(.))]),
C4 = rowMeans(.[grep("C4", names(.))]),
C5 = rowMeans(.[grep("C5", names(.))]),
C6 = rowMeans(.[grep("C6", names(.))]))
names(WGCNA_avg_gene)
one = WGCNA_avg_gene %>% select(Family,Symbol,C1,C2,C3,C4,C5,C6)
names(one)[2] = "Gene"
我得到每个数据帧的平均值转租它然后写回。
阅读后需要完成的步骤和我的理解是这样的。
- 读取文件夹中的所有文件
- 将它们制成列表。
- 使用函数进入列表lapply也许。
但我可以阅读文件并获得列表,但我不确定如何将我为个人 data-frame 计算的高于平均值的值应用到我的列表中并执行相同的操作。
任何帮助将不胜感激。
用list.files
列出所有要读取的文件,用lapply
读取每个文件,根据列名将它们分成不同的组,并取每个文件的平均值。
list_of_files <- list.files('csv/folder/',pattern = '\.csv$', full.names = TRUE)
lapply(list_of_files, function(x) {
tmp <- read.csv(x)
t1 <- tmp[-(1:2)]
cbind(tmp[1:2], sapply(split.default(t1,
sub('_.*', '', names(t1))), rowMeans, na.rm = TRUE))
}) -> result
如果你想为每个文件将结果写回一个新的数据帧。
lapply(list_of_files, function(x) {
tmp <- read.csv(x)
t1 <- tmp[-(1:2)]
result <- cbind(tmp[1:2], sapply(split.default(t1,
sub('_.*', '', names(t1))), rowMeans, na.rm = TRUE))
write.csv(result, paste0('result_', basename(x)), row.names = FALSE)
})
我有多个数据框或文件,我想得到每个 data-frame 中列的平均值并将它们写回。
我所有数据帧的模式。这就是我所有文件的命名方式 header.
names(WGCNA_avg_gene)
[1] "Family" "Symbol" "C1_S1_S7" "C1_S3_S9" "C2_S1_S10" "C2_S2_S11" "C3_S1_S13" "C3_S2_S14" "C3_S3_S15"
[10] "C4_S1_S16" "C4_S2_S17" "C4_S3_S18" "C5_S1_S19" "C5_S2_S20" "C5_S3_S21" "C6_S1_S22" "C6_S2_S23" "C6_S3_S24"
现在我做的就是这样
WGCNA_avg_gene <- e %>% mutate(C1 = rowMeans(.[grep("C1", names(.))]),
C2 = rowMeans(.[grep("C2", names(.))]),
C3 = rowMeans(.[grep("C3", names(.))]),
C4 = rowMeans(.[grep("C4", names(.))]),
C5 = rowMeans(.[grep("C5", names(.))]),
C6 = rowMeans(.[grep("C6", names(.))]))
names(WGCNA_avg_gene)
one = WGCNA_avg_gene %>% select(Family,Symbol,C1,C2,C3,C4,C5,C6)
names(one)[2] = "Gene"
我得到每个数据帧的平均值转租它然后写回。
阅读后需要完成的步骤和我的理解是这样的。
- 读取文件夹中的所有文件
- 将它们制成列表。
- 使用函数进入列表lapply也许。
但我可以阅读文件并获得列表,但我不确定如何将我为个人 data-frame 计算的高于平均值的值应用到我的列表中并执行相同的操作。
任何帮助将不胜感激。
用list.files
列出所有要读取的文件,用lapply
读取每个文件,根据列名将它们分成不同的组,并取每个文件的平均值。
list_of_files <- list.files('csv/folder/',pattern = '\.csv$', full.names = TRUE)
lapply(list_of_files, function(x) {
tmp <- read.csv(x)
t1 <- tmp[-(1:2)]
cbind(tmp[1:2], sapply(split.default(t1,
sub('_.*', '', names(t1))), rowMeans, na.rm = TRUE))
}) -> result
如果你想为每个文件将结果写回一个新的数据帧。
lapply(list_of_files, function(x) {
tmp <- read.csv(x)
t1 <- tmp[-(1:2)]
result <- cbind(tmp[1:2], sapply(split.default(t1,
sub('_.*', '', names(t1))), rowMeans, na.rm = TRUE))
write.csv(result, paste0('result_', basename(x)), row.names = FALSE)
})