比较三列并输出为1或0

时间:2017-06-30 13:37:32

标签: r

`

a <- c("11-12", "22-22", "11-33")
b <- c("33-22", "33-22", "44-33")
c <- c("15-66", "33-54", "22-66")
df <- data.frame(a,b,c)

嗨,我有一个这样的数据帧,想要沿着行使用特定子字符串比较三列,并为我提供一个新列,逻辑答案为1或0表示特定子字符串。 这意味着它应首先在第一列第一行&#34; 11&#34;中看到,然后在第二列第一行&#34; 33&#34;然后是第三栏&#34; 66&#34;。如果它满足所有三列,它应该在新列中将结果作为1,稍后它应该对所有行执行。

新列结果应该像1,0,1

如果有人对此有所回答,请告诉我,非常感谢。

2 个答案:

答案 0 :(得分:1)

使用data.table直截了当。

library(data.table)
a <- c("11-12", "22-22", "11-33")
b <- c("33-22", "33-22", "44-33")
c <- c("15-66", "33-54", "22-66")
dat <- data.table(a,b,c)

dat[, newcol := 0]
dat[a %like% "11" & b %like% "33" & c %like% "66", newcol := 1]

#        a     b     c newcol
# 1: 11-12 33-22 15-66      1
# 2: 22-22 33-22 33-54      0
# 3: 11-33 44-33 22-66      1

答案 1 :(得分:0)

我们可以尝试

as.integer(apply(df, 1, FUN = function(x) grepl("11", x[1]) & 
         grepl("33", x[2]) & grepl("66", x[3])))
#[1] 1 0 1

ReduceMap

as.integer(Reduce(`&`, Map(grepl,  c(11, 33, 66), df)))
#[1] 1 0 1