Для переменной цикла в качестве имени столбца - PullRequest
1 голос
/ 25 апреля 2019

В качестве примера я создал небольшой вектор, содержащий имена столбцов информационного кадра, и я хочу зациклить эти переменные, чтобы удалить определенные значения в столбце, где переменная i равна имени столбца

Создание вектора:

Ellenberg_value<- c( "VOCHTIND", "ZUURGIND", "STIKSIND", "ZOUT_IND")

Для цикла:

for (i in Ellenberg_value) {
    Ecobase<- Ecobase[!Ecobase$i== "X",]
    Ecobase<- Ecobase[!Ecobase$i== "?",]
}

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

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Я не думаю, что цикл необходим.Если я вас правильно понимаю, вы хотите удалить строки, в которых хотя бы один из столбцов "VOCHTIND", "ZUURGIND", "STIKSIND", "ZOUT_IND" равен "X", это правильно?

Ecobase[rowSums(Ecobase[,Ellenberg_value] == "X") == 0,]

Если вы хотите избавиться от строк с помощью"?"также вы можете сделать:

Ecobase[rowSums(sapply(Ecobase[Ellenberg_value], '%in%', c("X", "?"))) == 0,]
0 голосов
/ 25 апреля 2019

Вы должны установить подмножество с другим механизмом (используя [[ вместо $), когда имена столбцов сохраняются как символьные векторы. Пример:

df <- data.frame(a = 1 ,b = 3)
cols <- names(df)

Следующие работы по назначению:

for (i in cols) {
  print(i)
  print(df[[i]])
}
[1] "a"
[1] 1
[1] "b"
[1] 3

В то время как ваш код не:

for (i in cols) {
  print(i)
  print(df$i)
}
[1] "a"
NULL
[1] "b"
NULL

Поэтому в своем коде вы можете использовать Ecobase[!Ecobase[[i]] == "X", ].

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