簡體   English   中英

在 R 中為多個數據幀運行 for 循環?

[英]Running for loop for multiple dataframes in R?

所以我有多個數據框,我正在嘗試計算特定列的總和並將其存儲在每個數據框的數據框中的新列中,我不知道如何 go 關於它。 到目前為止,我可以為單個 dataframe 運行一個 for 循環:

for (i in nrow(df1)){df1$newcolumn <-(df1$a + df1$b + df1$c)}

但是如果我有多個數據幀(df1、df2、df3、...),我該怎么做? 每個 dataframe 的列名稱相同。

謝謝!

如果您的 dataframe 被稱為df1df2等,您可以使用此模式在使用mget的列表中獲取 dataframe 並在每個 Z6A8064B5DF4794555500553C47DZC 中使用transform添加一個新列。

new_data <- lapply(mget(ls(pattern = 'df\\d+')), function(df) 
                   transform(df, newcolumn = a + b + c))

這將返回數據框列表,如果您希望它們作為單獨的數據框再次使用list2env

list2env(new_data, .GlobalEnv)

另外兩種方法。

# create example data
df1 <- df2 <- data.frame(x=1:4, y=1:4)

# put into a list
l <- list(df1, df2)

# iterate over the list with a for loop
for(i in 1:length(l)){
  l[[i]]$new_column <- l[[i]]$x + l[[i]]$y
}

# same as above, but using `lapply()` and an anonymous function
# this requires you have the package `dplyr`
lapply(l, function(j) dplyr::mutate(j, new_column = x + y))

兩者都返回:

[[1]]
  x y new_column
1 1 1          2
2 2 2          4
3 3 3          6
4 4 4          8

[[2]]
  x y new_column
1 1 1          2
2 2 2          4
3 3 3          6
4 4 4          8

如上所示,要訪問單個列表元素,我們在此示例中創建了data.frame ,請使用雙括號表示法( [[ ):

> l[[1]]
  x y new_column
1 1 1          2
2 2 2          4
3 3 3          6
4 4 4          8

使用tidyverse ,我們可以做到

library(dplyr)
library(purrr)
new_data <- lmget(ls(pattern = '^df\\d+$')) %>%
        map(~ .x %>%
                  mutate(newcolumn = a + b + c))

如果我們需要單獨的數據集

list2env(new_data, .GlobalEnv)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM