Могу ли я использовать переменную для определения имени столбца в кадре данных R? - PullRequest
0 голосов
/ 01 августа 2020

Допустим, у меня есть df со многими столбцами, и 10 из этих столбцов имеют имена от «date1» до «date10»
Я хочу сделать что-то вроде:

for (x in 1:total_number_of_rows) {
   for (y in 1:10) {
      column_variable_name <- paste0("date",y)
      if (df$column_variable_name[x] <= df$another_date_column[x]) {
         *lots more code here* }
   }
}

Прямо сейчас, что я m делает это:

for (x in 1:total_number_of_rows) {
   if (df$date1[x] <= df$another_date_column[x]) {
      *lots more code here* }
   if (df$date2[x] <= df$another_date_column[x]) {
      *lots more code here* }
   if (df$date3[x] <= df$another_date_column[x]) {
      *lots more code here* }
   if (df$date4[x] <= df$another_date_column[x]) {
      *lots more code here* }
   if (df$date5[x] <= df$another_date_column[x]) {
      *lots more code here* }
   etc...
}

И «намного больше кода здесь» - это каждый раз один и тот же код. Цель состоит в том, чтобы не копировать и вставлять код 10 раз только потому, что мне нужно изменить имя переменной в операторе if. Первый набор кода выше не работает, потому что он ищет столбец во фрейме данных с именем «column_variable_name». Есть какой-либо способ сделать это? То, что я делаю во втором наборе кода, кажется ненужным.

1 Ответ

2 голосов
/ 01 августа 2020

Если нам нужно определить столбцы fruit, имеющие all значения, меньшие или равные определенному столбцу

nm1 <- startsWith(df, "fruit")
nm1[!colSums(df[nm1] > df[["anothervariable"]], na.rm = TRUE)]

Или другой вариант: Reduce

nm1[Reduce(`|`, lapply(df[nm1], `>=`, df[["anothervariable"]]))]
...