我有以下資料集串列:
dflist <- list(df1_A, df1_B, df1_C, df1_D, df1_E,
df2_A, df2_B, df2_C, df2_D, df2_E,
df3_A, df3_B, df3_C, df3_D, df3_E,
df4_A, df4_B, df4_C, df4_D, df4_E)
names(dflist) <- c("df1_A", "df1_B", "df1_C", "df1_D", "df1_E",
"df2_A", "df2_B", "df2_C", "df2_D", "df2_E",
"df3_A", "df3_B", "df3_C", "df3_D", "df3_E",
"df4_A", "df4_B", "df4_C", "df4_D", "df4_E")
每個資料框都具有相同的結構(具有相同的列名):
df1_A
V1 V2
G18941 17
G20092 534
G19692 10
G19703 260
G16777 231
G20045 0
...
我想創建一個函式,將串列中具有相同數字(但字母不同)的所有資料幀合并,并在 V1 中的名稱相同時對 V2 列中的值求和。
在困難中,我設法使用以下代碼為 df1_A 和 df1_B 執行此操作:
newdf <- bind_rows(df1_A, df1_B) %>%
group_by(V1) %>%
summarise_all(., sum, na.rm = TRUE)
我可以很容易地把它變成這樣的函式:
MergeAndSum <- function(df1,df2)
newdf <- bind_rows(df1, df2) %>%
group_by(V1) %>%
summarise_all(., sum, na.rm = TRUE)
return(newdf)
但我真的不知道如何呼叫它來執行回圈。我嘗試類似:
for (i in 2:length(dflist)){
df1 <- List_RawCounts_Files[i-1]
df2 <- List_RawCounts_Files[i]
out1 <- MergeAndSum(df1,df2)
return(out1)
}
我想象一些東西將df1_A合并 求和到df1_B并將結果重新分配給df1_A,然后用df1_A和df1_C回呼函式并將結果重新分配給df1_A,然后用df1_A和df1_D回呼函式,并將結果重新分配給df1_A,然后用df1_A和df1_E回呼函式
然后與 df2 (df2_A, df2_B,... df2_E) 相同,然后是 df3、df4 和 df5。
如果你知道怎么做,我在聽。謝謝
uj5u.com熱心網友回復:
bind_rows可以將資料框串列組合在一起。您可以將它們與id列組合,以便將串列的名稱添加為新列,提取資料框名稱(df1from df1_A,df2fromdf2_A等)并將V2每個資料框和V1列的列總和作為組。
library(dplyr)
bind_rows(dflist, .id = "id") %>%
mutate(id = stringr::str_extract(id, 'df\\d ')) %>%
group_by(id, V1) %>%
summarise(V2 = sum(V2, na.rm = TRUE), .groups = "drop")
由于您只想要sum一列 ( V2),您可以使用它summarise來代替summarise_all已被取代的列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/481519.html
