我试图基于列1的内容使用dplyr更改(或mutate_if?)数据框的列2。
ID TEST PREF
11 true blue
23 false red
4 false yellow
如果test ==“ false”,我想将PREF =“ orange”突变。否则,请勿更改PREF。
ID TEST PREF
11 true blue
23 false orange
4 false orange
我认为ifelse语句可能有用,但不了解如何使else不执行任何操作。似乎返回的是列号而不是该行的内容。
df <- data.frame(ID = c("11", "23", "4"),
TEST = factor(c("true", "false", "false")),
PREF = factor(c("blue", "red", "yellow")))
df <- df %>%
mutate(PREF = ifelse(TEST == "false", "orange", PREF))
我觉得mutate_if应该是合适的,但我认为我不太了解它的功能,因此找不到与我所需类似的示例。像这样:
df <- df %>%
mutate_if(TEST == "true", PREF = "orange")
有人可以给我一些建议吗?谢谢!
编辑:
我已经意识到,在ifelse语句中,它返回的是因子的水平,而不是我想要的字符。通过指定as.character可以完全按照我希望的那样工作。
df2 <- df %>%
mutate(PREF = factor(ifelse(TEST == "false", "white", as.character(PREF))))
答案 0 :(得分:1)
您正在努力!但是,必须确保您的字符列未转换为因数。我不完全理解为什么if_else()的因子水平失败,但是至少下面的适应代码可以满足我的要求。 stringsAsFactors
与以往一样重要。
library(dplyr)
df <- data.frame(ID = c("11", "23", "4"),
myTEST = c("true", "false", "false"),
myPREF = c("blue", "red", "yellow"), stringsAsFactors=F)
new_df <- df %>%
mutate(myPREF = case_when(myTEST=="false" ~ "orange",
TRUE ~ myPREF))
str(new_df)
mutate_if
有一个吸引人的名称,但该谓词仅对列有效,对行不起作用。