我有 4 個資料框保存為 .csv 檔案或 .txt(df1.csv、df2.csv、df3.txt、df4.txt)。我想將 df1 的所有行與 df3 和 df4 以及 df2 的所有行與 df3 和 df4 相加。我想將結果存盤在主串列的兩個單獨的子串列中(一個用于 df1,一個用于 df2)。
例子:
df1 df3
colA colA
5 1
1 4
3 1
df2 df4
colA colA
0 0
2 0
1 9
輸出:
我想要一個 list_ALL ,其中包含 listDF1 以及 df1 與 df3 和 df4 之和的結果,以及一個 listDF2 包含 df2 與 df3 和 df4 的結果
LISTDF1
df5 df6
colA colA
6 5
5 1
4 12
LISTDF2
df7 df8
colA colA
1 0
6 2
2 10
list_ALL<-list()
files.csv<-list.files(pattern = "*.csv")
files.txt<-list.files(pattern = "*.txt")
for (i in 1:length(files.csv)) {
list_ALL[[i]]<-list()
}
names(listALL)<-files.csv
for (i in 1:length(files.csv))
for (j in 1:length(files.txt))
{{ list_ALL[[i]][[j]] <- rowSums([[i]][[j]])}}
但是我嘗試了這個,只有第一個子串列被填滿。
uj5u.com熱心網友回復:
像這樣的東西?
lst1 <- list(df1<-c(5,1,3), df2<-c(0,2,1))
lst2 <- list(df3<-c(1,4,1), df4<-c(0,0,9))
res_lst <- list()
for(i in seq_along(lst1)){
for(j in seq_along(lst2)){
res <- lst1[[i]] lst2[[j]]
res_lst <- append(res_lst, list(res))
}
}
splt_lst <- split(x = res_lst, f = rep(1:2, each=2))
$`1`
$`1`[[1]]
[1] 6 5 4
$`1`[[2]]
[1] 5 1 12
$`2`
$`2`[[1]]
[1] 1 6 2
$`2`[[2]]
[1] 0 2 10
uj5u.com熱心網友回復:
另一種可能的解決方案:
set.seed(123)
df1 <- data.frame(colA = sample(1:10, 3))
df2 <- data.frame(colA = sample(1:10, 3))
df3 <- data.frame(colA = sample(1:10, 3))
df4 <- data.frame(colA = sample(1:10, 3))
lapply(list(df1, df2),
\(x) asplit(sapply(list(df3, df4), \(y) rowSums(cbind(x,y))), 2))
#> [[1]]
#> [[1]][[1]]
#> [1] 8 14 8
#>
#> [[1]][[2]]
#> [1] 9 19 4
#>
#>
#> [[2]]
#> [[2]][[1]]
#> [1] 7 10 9
#>
#> [[2]][[2]]
#> [1] 8 15 5
uj5u.com熱心網友回復:
for (j in 1:length(files))
{
cog_out_dat[[j]]<- lapply(meta_exp_dat,function(df) try(read_outcome_data(
snps = df$SNP,
filename = files[[j]],
gene_col = "anno",
sep = " ",
chr_col = "CHR",
pos_col = "BP",
snp_col = "SNP",
beta_col = "BETA",
se_col = "SE",
effect_allele_col = "ALLELE1",
other_allele_col = "ALLELE0",
eaf_col = "EAF",
pval_col = "P",
phenotype_col = "DATA"
)))
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/442928.html
