在R中按名称简单循环列

时间:2018-05-09 00:40:30

标签: r loops dataframe

我试图遍历df中的列,但它会提供null个值:

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

我认为这是因为istring,所以train$"column_name"无效。我怎么能改变呢?或者可能有其他选择吗?

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

2 个答案:

答案 0 :(得分:2)

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

最后,无论您尝试做什么转换,都可以通过其他方法提供更好的服务,例如_applypurrr::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 package(v0.2.0)创建于2018-05-08。

答案 1 :(得分:-1)

使用colnames(df)。例如,

colnames(mtcars)

按顺序为您提供列名称的​​向量:

[1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"
[7] "qsec" "vs"   "am"   "gear" "carb"

您可以使用for循环:

for (col.name in colnames(mtcars)) {
    print(col.name)
}

这会给你:

[1] "mpg"
[1] "cyl"
[1] "disp"
[1] "hp"
[1] "drat"
[1] "wt"
[1] "qsec"
[1] "vs"
[1] "am"
[1] "gear"
[1] "carb"