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