我该如何在R中处理包含多个数据框的两个列表?以下是示例数据:
请注意,
我希望以特定方式折叠这些
set.seed(1)
set1 <- data.frame(NAME = paste("row_", 1:10, sep = ""),
SYMBOL = paste(c(sample(LETTERS, 10))),
SIGNIFICANT = sample(c("yes", "no"), 10, replace = TRUE))
set2 <- data.frame(NAME = paste("row_", 1:10, sep = ""),
SYMBOL = paste(c(sample(LETTERS, 10))),
SIGNIFICANT = sample(c("yes", "no"), 10, replace = TRUE))
set3 <- data.frame(NAME = paste("row_", 1:10, sep = ""),
SYMBOL = paste(c(sample(LETTERS, 10))),
SIGNIFICANT = sample(c("yes", "no"), 10, replace = TRUE))
set4 <- data.frame(NAME = paste("row_", 1:10, sep = ""),
SYMBOL = paste(c(sample(LETTERS, 10))),
SIGNIFICANT = sample(c("yes", "no"), 10, replace = TRUE))
files <- list(set1, set2, set3, set4)
names(files) <- paste("Set", 1:4, sep = "")
reports <- list(data.frame(SETS = c("Set1", "Set3"),
STATISTIC = runif(2)),
data.frame(SETS = c("Set2", "Set4"),
STATISTIC = runif(2)))
names(reports) <- c("Report1", "Report2")
files
是一个包含许多来自分析的元数据数据帧的列表。
> files$Set1
NAME SYMBOL SIGNIFICANT
1 row_1 Y no
2 row_2 D no
3 row_3 G no
4 row_4 A yes
5 row_5 B yes
6 row_6 K yes
7 row_7 N yes
8 row_8 R yes
9 row_9 W yes
10 row_10 J yes
reports
是一个包含两个数据框的列表,其中包含来自双向分析的主要输出和相关统计信息。
> reports$Report1
SETS STATISTIC
1 Set1 0.4100841
2 Set3 0.8108702
请注意,
files
列表中的数据框名称与reports
列表中的数据框第二列相对应。我希望以特定方式折叠这些
files
元数据。如果files$Set1$SIGNIFICANT == 'yes'
,我想将相应的SYMBOL
添加到逗号分隔的字符串中。然后,我想将该字符串附加到reports
中的相应集合中。因此,我的期望输出如下:> head(reports$Report1)
SETS STATISTIC SYMBOL
1 Set1 0.4100841 A, V, K, N, R, W, J
2 Set3 0.8108702 F, S, J, V
同样也适用于Report2
对于这个例子手动完成很容易,但在我的实际项目中,length(files)=600
我试图通过一个for
循环来解析它,但总是遇到错误。这是我当前的迭代:
output <- data.frame()
for(i in 1:length(files)){
for(j in 1:nrow(files[[i]])){
if(files[j, 3] == "Yes"){
output[i, 1]=i;
output[i, 2]=paste0(i[,2], collapse = ", ")
}
}
}
我的当前错误:
Error in i[[j, 3]] : incorrect number of subscripts
我已经使用 R 4 年了,如果有一件事我知道的是,人们经常避免使用循环。我知道一些类似于 apply
、lapply
等函数通常会让生活变得更加轻松。