Простой цикл по столбцам по имени в R - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь перебрать столбцы в моей df, но это дает null значения:

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

Я думаю, это потому, что i - это string, поэтому train$"column_name" не будет работать. Как я могу это изменить? Или, может быть, какая-то альтернатива?

PS: мне нужно перебрать их по имени и вызвать переменную в цикле по ее имени, так как я буду выполнять преобразование для каждой переменной с учетом набора условий.

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Используйте 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"
0 голосов
/ 09 мая 2018

Как отмечается в комментарии Вена, вы можете использовать квадратную скобку для подмножества, которая принимает имена столбцов в виде строки. Однако, если вы пытаетесь зациклить столбцы, имеет смысл просто зациклить столбцы. Фреймы данных представляют собой списки столбцов, поэтому нет необходимости использовать 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

Создано в 2018-05-08 пакетом представ (v0.2.0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...