`
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
如果有人对此有所回答,请告诉我,非常感谢。
答案 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
或Reduce
和Map
as.integer(Reduce(`&`, Map(grepl, c(11, 33, 66), df)))
#[1] 1 0 1