Ifelse在r

时间:2018-01-19 16:58:34

标签: r if-statement

我知道有类似的问题,但我找不到我想要的答案。我试图在数据框中的两列中匹配一些字符:

 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。

1 个答案:

答案 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" ...