我想根据现有列中的条件将新列添加到数据框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
任何建议将不胜感激。
答案 0 :(得分:1)
我们不需要执行filter
,可以使用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分配给原始数据集中的新列而发生错误