[英]Ifelse generating numeric values in r
我知道有人問過類似的問題,但找不到所需的答案。 我正在嘗試在數據框的兩列中匹配一些字符:
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”為true,則要將orig中的值復制到其中。 如果“ match”為假,我想將“ new”中的值復制到其中。 應該很容易!
我使用代碼:
data <- data %>% mutate(final = ifelse(match == T, orig, new))
運行此命令時,“最終”列中的所有內容都變為數字。
我還嘗試了if_else,它生成消息“在[<-.factor
( *tmp*
,i,value = c(13L,13L,2L,13L,13L,4L,:無效的因子水平,生成的NA”)和將我的大部分FALSE值轉換為NA。
您可以顯式將列強制轉換為字符。
#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" ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.