Новый столбец / изменение на основе существующего столбца - PullRequest
1 голос
/ 22 октября 2019

Я хочу добавить новый столбец в фрейм данных df на основе условия из существующих столбцов, например,

df$TScore = as.factor(0)
df$TScore = 
  if_else(df$test_score >= '8.0', 'high',
      if_else(!is.na(df$test_score), 'low', 'NA'))

Проблема, с которой я сталкиваюсь, заключается в том, что в некоторых случаях TScore - это то, чего я ожидалбыть «высоким», когда оценка 8 или выше, но в некоторых случаях это не правильно. Есть ли ошибка в приведенном выше коде? В этих данных много NA.

Я также борюсь с тем, как написать это с помощью dplyr (). Пока что я написал это:

df$TScore =   df %>%
                filter(test_score >= 8) %>%
                    mutate(TScore = 'high')

Но, как и следовало ожидать, размеры не совпадают. Следующая ошибка дана:

Error in `$<-.data.frame`(`*tmp*`, appScore, value = list(cluster3 = c(1L,  : replacement has 126 rows, data has 236

Любой совет будет принята с благодарностью.

1 Ответ

1 голос
/ 22 октября 2019

Нам не нужно делать filter, insted может использовать ifelse или case_when

library(dplyr)
df <- df %>%           
          mutate(TScore = case_when(test_score >= 8 ~'high', TRUE ~ "low"))

, если нам нужно избежать назначения <, можно использовать составной оператор(%<>% из magrittr

library(magrittr)
df %<>%
     mutate(TScore = case_when(is.na(test_score) ~ NA_character_, 
                               test_score >= 8 & !is.na(test_score) ~'high', 
                    TRUE ~ "low"))

Ошибка произошла из-за назначения filtered data.frame новому столбцу в исходном наборе данных

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