首页 > 解决方案 > 在R中按名称简单循环列

问题描述

我正在尝试遍历我的 df 中的列,但它给出了null值:

for (i in names(train_num)){
    print(train_num$i)
}

我认为这是因为i是一个string,所以train$"column_name"是行不通的。我该如何改变呢?或者也许有其他选择?

PS:我需要按名称循环它们并按名称调用循环中的变量,因为我将对给定一组条件的每个变量进行转换。

标签: rloopsdataframe

解决方案


正如 Wen 的评论所指出的,您可以使用方括号来设置子集,它接受列名作为字符串。但是,如果您尝试遍历列,则仅遍历列更有意义。数据框是列的列表,因此根本不需要使用names()和子集。

最后,无论您尝试进行何种转换,都可能通过不同的方法(例如_applyorpurrr::map_函数或dplyr::mutate_all.

df <- head(airquality)
for (i in names(df)){
  print(df[, i])
}
#> [1] 41 36 12 18 NA 28
#> [1] 190 118 149 313  NA  NA
#> [1]  7.4  8.0 12.6 11.5 14.3 14.9
#> [1] 67 72 74 62 56 66
#> [1] 5 5 5 5 5 5
#> [1] 1 2 3 4 5 6

for (col in df){
  print(col)
}
#> [1] 41 36 12 18 NA 28
#> [1] 190 118 149 313  NA  NA
#> [1]  7.4  8.0 12.6 11.5 14.3 14.9
#> [1] 67 72 74 62 56 66
#> [1] 5 5 5 5 5 5
#> [1] 1 2 3 4 5 6

reprex 包(v0.2.0) 于 2018 年 5 月 8 日创建。


推荐阅读