R,如果具有多个条件的字符向量具有多个条件,则为R

时间:2018-07-18 09:46:38

标签: r

我知道有很多标题相似的问题,但是我无法为我的情况创建可行的解决方案。我有几个向量,结合了文本和NA值;

DATA <- data.frame("Col.A" = c("Some Text", "Some other text", "Yes", "No", "no", 
NA, "No", "Yes", "yes", NA, NA, NA), "Col.B" = c(NA, NA, "Green", NA, NA, NA, NA, 
"Blue", "Blue 2", NA, NA, NA))

我需要检查Col.A是否包含“是”,“是”,“否”或“否”。如果不是,那么我想将Col.A文本复制到Col.B中。如果它具有这四个条件中的任何一个,我想保留Col.B

我可以使它与单个ifelse语句一起使用(因此,仅满足条件之一),但是当我尝试包含多个条件时,它只是将所有文本从Col.A复制到{ {1}}(即包括“是”和“否”条目,抹去了我想保留在Col.B中的信息。我已经尝试过了;

Col.B

和其他链接;

DATA$Col.B <- if_else((DATA$Col.A != "Yes" | (DATA$Col.A != "yes") |
(DATA$Col.A != "No") | (DATA$Col.A != "no")) , DATA$Col.B, DATA$Col.A)

但是没有运气。任何指针表示赞赏!

3 个答案:

答案 0 :(得分:3)

一种public class Square extends Rectangle { public Square(double side) { super(side, side); this.shapeName = "Square"; this.width = this.height = side; } } 方法

tidyverse

在基数R中使用library(tidyverse) DATA %>% mutate_if(is.factor, as.character) %>% mutate(Col.B = if_else(Col.A %in% c("Yes", "yes", "No", "no"), Col.B, Col.A)) # Col.A Col.B #1 Some Text Some Text #2 Some other text Some other text #3 Yes Green #4 No <NA> #5 no <NA> #6 <NA> <NA> #7 No <NA> #8 Yes Blue #9 yes Blue 2 #10 <NA> <NA> #11 <NA> <NA> #12 <NA> <NA>

grepl

或类似于将transform(DATA, Col.B = ifelse( grepl("([Yy]es|[Nn]o)", Col.A), as.character(Col.B), as.character(Col.A))) tidyverse一起使用的%in%方法(感谢@DJV)

tolower

答案 1 :(得分:0)

使用基数R:您可以使用grepl

 DATA = rapply(DATA,as.character,"factor",how="replace")#CHANGE FACTOR COLUMNS TO CHARACTER

 transform(DATA,Col.B=ifelse(grepl("\\b(Yes|no)\\b",Col.A,ignore.case = T),Col.B,Col.A))
             Col.A           Col.B
1        Some Text       Some Text
2  Some other text Some other text
3              Yes           Green
4               No            <NA>
5               no            <NA>
6             <NA>            <NA>
7               No            <NA>
8              Yes            Blue
9              yes          Blue 2
10            <NA>            <NA>
11            <NA>            <NA>
12            <NA>            <NA>

答案 2 :(得分:0)

如我的评论所述,我将#!/bin/sh # Uncomment the following two lines for normal desktop: # unset SESSION_MANAGER # exec /etc/X11/xinit/xinitrc [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot -solod grey vncconfig -iconic & gnome-panel & gnome-settings-daemon & metacity & nautilus & gnome-terminal & 更改为!=,并得到与其他答案相同的结果,并且与您的原始问题中所述相同。

==

reprex package(v0.2.0)于2018-07-18创建。