应用 strsplit rowwise 并将列添加到数据

发布于 2024-12-01 08:22:43 字数 457 浏览 1 评论 0原文

 a=c("A","A,B","C","B,C")
 b=c(1,2,3,4)
 dat<-data.frame(a,b)

 c=c("A","B","D","A")
 d=c(5,6,7,8)
 g<-data.frame(c,d)

我想比较 dat 和 g。如果 dat 的 a 列中的元素与 g 中的 c 列元素匹配,则 g 中的 d 列的匹配条目应添加到 dat 中。

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

我怎样才能使:

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

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

 a=c("A","A,B","C","B,C")
 b=c(1,2,3,4)
 dat<-data.frame(a,b)

 c=c("A","B","D","A")
 d=c(5,6,7,8)
 g<-data.frame(c,d)

I would like to compare dat and g. If elements in column a of dat matches an element of column c in g, matched entry of column d in g should be added to dat.

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

How can I make :

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

entry in dat$NEW should look like "5,8" ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

旧人 2024-12-08 08:22:43

这对您的数据有效吗?

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

Is this working for your data?

find.match <- g$c %in% dat$a
g[find.match, ]
  c d
1 A 5
4 A 8
从﹋此江山别 2024-12-08 08:22:43

这还不完全清楚,但我认为您描述的是这样的:

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

> gc <- sapply(split(g$d, g$c), paste, collapse=",")
> gc
    A     B     D 
"5,8"   "6"   "7" 

步骤 2:将其合并到 data.frame dat

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

It's not entirely clear, but this what I think you describe:

Step 1: Combine duplicated elements in your data.frame g

> gc <- sapply(split(g$d, g$c), paste, collapse=",")
> gc
    A     B     D 
"5,8"   "6"   "7" 

Step 2: Combine this into your data.frame dat

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

Results:

    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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文