【问题标题】:R: Concatenate strings with same valuesR:连接具有相同值的字符串
【发布时间】:2015-06-03 15:59:19
【问题描述】:

我有一个如下的数据框:

1   a
2   a
3   a
4   a
a   a
x   b
y   b
b   b

我怎样才能得到类似的东西:

a   1,2,3,4
b   x,y

请考虑标识符 ab 也列在第 1 列中,但不应成为连接字符串的一部分。非常感谢!

【问题讨论】:

  • 您好亨利,我的新问题是您链接到的问题的扩展。

标签: r string concatenation


【解决方案1】:

根据最初的描述,

aggregate(V1~V2, df1, toString)
#  V2         V1
#1  a 1, 2, 3, 4
#2  b       x, y

更新

假设,如果我们需要在将pasteV1 的元素放在一起之前删除第一列('V1')中也存在于分组列('V2')中的元素,有几个选项如下:

library(data.table)
setDT(df2)[!V1 %chin% V2, toString(V1), by=V2]
#    V2         V1
#1:  a 1, 2, 3, 4
#2:  b       x, y

或者

 library(dplyr)   
 df2 %>%
     filter(!V1 %in% V2) %>% 
     group_by(V2) %>%
     summarise(V1=toString(V1))

数据

df1 <- structure(list(V1 = c("1", "2", "3", "4", "x", "y"),
 V2 = c("a", 
 "a", "a", "a", "b", "b")), .Names = c("V1", "V2"), 
class = "data.frame", row.names = c(NA, -6L))

df2 <- structure(list(V1 = c("1", "2", "3", "4", "a", "x", "y", "b"), 
 V2 = c("a", "a", "a", "a", "a", "b", "b", "b")), .Names = c("V1", 
"V2"), class = "data.frame", row.names = c(NA, -8L))

【讨论】:

  • 谢谢阿克伦。我只是稍微编辑一下我的问题。您还知道更高级问题的解决方案吗?谢谢!
  • @Arun 谢谢,我认为%chin% 是新的。
  • @Arun 我想我可以删除filter 选项并将其放入summarise。我在想这对于 OP 来说会更清楚一些。
  • 非常感谢阿克伦!这就像一个魅力!对我完成工作很有帮助!
  • @user969113 没问题。很高兴为您提供帮助。
猜你喜欢
  • 2015-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-14
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
相关资源
最近更新 更多