遍历多个数据帧

时间:2020-05-24 03:21:10

标签: r

对于两个或多个数据帧,df1, df2, df3, df4, ...应该使用哪种数据结构,以便可以遍历数据帧并对每个数据帧执行某些操作。

for(df in 'what') {
  print(colnames(df))
}

what部分-使用哪种数据结构,以便可以在for循环中访问每个数据帧以执行某些操作。

3 个答案:

答案 0 :(得分:3)

通常,最好将数据包含在列表中,而不要在全局环境中具有单独的数据框。将数据保存在列表中更易于管理。

list_df <- mget(ls(pattern = 'df\\d+'))

,并使用lapply对每个元素执行操作

lapply(list_df, function(x) names(x))

答案 1 :(得分:1)

library(tidyverse)
for(df in list(band_instruments, iris, mtcars)){

  print(colnames(df))
}

# [1] "name"  "plays"
# [1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"     
# [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"

答案 2 :(得分:1)

最好不要在全局环境中创建单独的对象。而是可以将文件直接读取到list

files <- list.files(pattern = "\\.csv")
lst1 <- lapply(files, read.csv)

或与tidyverse

library(purrr)
library(readr)
lst1 <- map(files, read_csv)

,然后使用listlapply获取列名

lapply(lst1, names)

此外,如果文件很大,则vroom还提供了一个选项,可以将所有文件压缩为单个数据。frame

library(vroom)
files <- fs::dir_ls(glob = "csv")
out <- vroom::vroom(files)