【发布时间】:2018-01-19 16:58:34
【问题描述】:
我知道有人问过类似的问题,但我找不到我正在寻找的答案。我正在尝试在数据框中的两列中匹配一些字符:
num orig new match
1 p p T
2 t g F
3 p b F
4 d d T
5 g g T
我想创建一个名为“final”的新列,如果“match”为真,我想将值从 orig 复制到其中。如果“匹配”为假,我想将“新”中的值复制到其中。应该很容易!
我使用代码:
data <- data %>% mutate(final = ifelse(match == T, orig, new))
当我运行它时,'final' 列中的所有内容都会变成数字。
我也尝试过 if_else,它会生成消息“In [<-.factor(*tmp*, i, value = c(13L, 13L, 2L, 13L, 13L, 4L, : invalid factor level, NA generated"并将我的大部分 FALSE 值转换为 NA。
【问题讨论】:
-
如果您尝试
ifelse(match, as.character(origin), as.character(new))会怎样?似乎是factor和levels写入final。 -
行得通!谢谢!
-
完美。我猜你不希望它们成为因素,因为你没有预料到这种行为。在这种情况下,您可能需要检查是否设置了
stringsAsFactors = FALSE,例如从 CSV 读取数据时。
标签: r if-statement