循环遍历多个数据框并使用胶水 R 保存列名

loop through multiple dataframes and save column names using glue R

我正在尝试从 R 中的多个数据帧中保存列名。我目前正在使用 Glue 的字符串语法,但目前我只是不断得到 'NULLs'

我在这里构造了一个例子。我在下面有这两个数据框:

over50_one <- c("n", "n", "n", "y", "n")
Gender_one <- c("F", "F", "M", "M", "F")
Name_one <- c("Jon", "Bill", "Maria", "Ben", "Tina")
Age_one <- c(23, 41, 32, 58, 26)

df_one <- data.frame(Name_one, Age_one,Gender_one,over50_one)

over50_two <- c("n", "n", "n", "y", "n")
Gender_two <- c("F", "F", "M", "M", "F")
Name_two <- c("Jon", "Bill", "Maria", "Ben", "Tina")
Age_two <- c(23, 41, 32, 58, 26)

df_two <- data.frame(Name_two, Age_two,Gender_two,over50_two)

我创建了这个循环来将列名保存到 'names':

list_loop <- c('one','two')

for(number in list_loop) {                 # Head of for-loop
  print(number)
  names <-  names(glue('df_{number}'))
  print(names)
}

但是我得到的名称输出是 NULL,当我应该得到 over50_one、gender_one、name_one 等等等等。任何帮助都会很棒。

这里发生了几件事。首先,您正在调用您的对象 names,这也是您正在调用的函数的名称。这将在循环的第一次迭代后给您带来问题。您应该将其命名为 my_names 或类似名称。

其次,当您执行 names(glue('df_{number}')) 时,您在第一次迭代时执行 names('df_one'),即包含一个元素的字符向量的名称,而不是名为 df_one 的数据框.该向量没有任何名称,因此它 returns NULL.

而不是使用 glue,我会这样做:

list_loop  <- ls(pattern = "^df_")

for(my_df in list_loop) {
  print(my_df)                 # Head of for-loop
  my_names <-  names(get(my_df))
  print(my_names)
}

# [1] "df_one"
# [1] "Name_one"   "Age_one"    "Gender_one" "over50_one"
# [1] "df_two"
# [1] "Name_two"   "Age_two"    "Gender_two" "over50_two"