我试图遍历df中的列,但它会提供null
个值:
for (i in names(train_num)){
print(train_num$i)
}
我认为这是因为i
是string
,所以train$"column_name"
无效。我怎么能改变呢?或者可能有其他选择吗?
PS:我需要按名称循环遍历它们,并通过名称调用循环中的变量,因为我将根据一组条件对每个变量进行转换。
答案 0 :(得分:2)
正如Wen的评论所指出的,你可以使用方括号来子集,它接受列名作为字符串。但是,如果您尝试遍历列,则循环遍历列更有意义。数据框是列的列表,因此根本不需要使用names()
和子集。
最后,无论您尝试做什么转换,都可以通过其他方法提供更好的服务,例如_apply
或purrr::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"