【问题标题】:One cell is contained in another cell in R [duplicate]一个单元格包含在R中的另一个单元格中[重复]
【发布时间】:2019-01-13 05:10:46
【问题描述】:

我有类似的东西:

One       Two 
A,B,C       A 
A,C,        Z 
R,F,        K 
T           T  

如果“一”中包含“二”,我想进入“第三”是/否。

One       Two    Three
A,B,C       A     yes
A,C,        Z     no 
R,F,        K     no 
T           T     yes  

我知道我可以通过使用grepl 来获取它,就像这样: grepl("A" , all$One) -> all&Three。但是我有几百个案例,所以我无法编写所有这些单独的查询。
那么我应该如何在greplfunction 中将整个“Two”单元格实现为模式?

【问题讨论】:

标签: r compare grepl


【解决方案1】:

你可以使用mapply():

all <- read.table(header=TRUE, stringsAsFactors = FALSE, text=
"One       Two 
A,B,C       A 
A,C,        Z 
R,F,        K 
T           T")
all$Three <- mapply(grepl, all$Two, all$One)
all
# > all
#     One Two Three
# 1 A,B,C   A  TRUE
# 2  A,C,   Z FALSE
# 3  R,F,   K FALSE
# 4     T   T  TRUE

如果你真的想要“是”或“否”作为结果,那么你可以这样做:

all$Three <- ifelse(mapply(grepl, all$Two, all$One), "yes", "no")

或(如 Rui Barradas 评论,谢谢):

all$Three <- factor(mapply(grepl, all$Two, all$One), labels = c("no", "yes"))

【讨论】:

  • 如果你想匹配OP的输出,为什么不factor(mapply(etc), labels = c("no", "yes"))
【解决方案2】:

您可以使用stringr::str_detect

library(tidyverse)
df %>%
    mutate_if(is.factor, as.character) %>%
    mutate(Three = str_detect(One, Two))
#    One Two Three
#1 A,B,C   A  TRUE
#2  A,C,   Z FALSE
#3  R,F,   K FALSE
#4     T   T  TRUE

样本数据

df <- read.table(text  =
    "One       Two
A,B,C       A
A,C,        Z
R,F,        K
T           T", header = T)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    相关资源
    最近更新 更多