我知道有类似的问题,但我找不到我想要的答案。我试图在数据框中的两列中匹配一些字符:
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'的新列,如果'匹配'是的,我想将orig中的值复制到它中。如果匹配'这是假的,我想复制“' new'进去。应该很容易!
我使用代码:
data <- data %>% mutate(final = ifelse(match == T, orig, new))
当我执行此操作时,列中的所有内容&#39; final&#39;变成数字。
我还尝试了if_else,它生成了消息&#34;在[<-.factor
中*tmp*
,i,值= c(13L,13L,2L,13L,13L,4L ,:无效因子级别,NA生成&#34;并将我的大多数FALSE值转换为NA。
答案 0 :(得分:1)
您可以明确地将列强制转换为字符。
#install.packages("dplyr")
library(dplyr)
data = read.table(header = T,
text = 'num orig new match
1 p p T
2 t g F
3 p b F
4 d d T
5 g g T')
data <-
data %>%
mutate_if(is.factor, as.character) %>%
mutate(final = as.character(ifelse(match == T, orig, new)))
str(data)
#'data.frame': 5 obs. of 5 variables:
#$ num : int 1 2 3 4 5
#$ orig : chr "p" "t" "p" "d" ...
#$ new : chr "p" "g" "b" "d" ...
#$ match: logi TRUE FALSE FALSE TRUE TRUE
#$ final: chr "p" "g" "b" "d" ...