Function 按行应用strsplit并向数据添加列

Function 按行应用strsplit并向数据添加列,function,r,loops,split,Function,R,Loops,Split,我怎样才能做到: dat$NEW ="" sapply(strsplit(as.character(dat$a), ","),function(x){tmp=grep(x,g$c);dat$NEW=x) dat$NEW中的条目应该看起来像“5,8”这是否适用于您的数据 g[grep("A",g$c),] c d 1 A 5 4 A 8 find.match不完全清楚,但我认为您描述的是: 步骤1:在data.frame g中组合重复的元素 find.match <- g$c %in

我怎样才能做到:

dat$NEW =""
sapply(strsplit(as.character(dat$a), ","),function(x){tmp=grep(x,g$c);dat$NEW=x)

dat$NEW中的条目应该看起来像“5,8”

这是否适用于您的数据

g[grep("A",g$c),]
  c d
1 A 5
4 A 8

find.match不完全清楚,但我认为您描述的是:

步骤1:在data.frame g中组合重复的元素

find.match <- g$c %in% dat$a
g[find.match, ]
  c d
1 A 5
4 A 8
结果:

cbind(dat, 
    new=sapply(
        dat$a, 
        function(x)paste(
              gc[match(strsplit(as.character(x), ",")[[1]], g$c)], 
              collapse=",")
    )
)

谢谢你的回复,但是我在数据“A,B”中丢失了g的点击“B”!我想扩展我的g:c=c(“A,B”,“B”,“D”,“A”)D=c(5,6,7,8)g这里可能有一个涉及
grep
的解决方案,但是我修改了我的答案,通过使用
strsplit
match
> gc <- sapply(split(g$d, g$c), paste, collapse=",")
> gc
    A     B     D 
"5,8"   "6"   "7" 
cbind(dat, 
    new=sapply(
        dat$a, 
        function(x)paste(
              gc[match(strsplit(as.character(x), ",")[[1]], g$c)], 
              collapse=",")
    )
)
    a b   new
1   A 1   5,8
2 A,B 2 5,8,6
3   C 3    NA
4 B,C 4  6,NA