【问题标题】:use dplyr to concatenate a column [duplicate]使用 dplyr 连接一列[重复]
【发布时间】:2015-04-29 10:35:13
【问题描述】:

我有一个data_frame,我希望vector 成为A 中元素的串联。所以

df <- data_frame(id = c(1, 1, 2, 2), A = c("a", "b", "b", "c"))
df
Source: local data frame [4 x 2]

  id A
1  1 a
2  1 b
3  2 b
4  2 c

应该变成

newdf
Source: local data frame [4 x 2]

  id vector
1  1 "a b"
2  2 "b c"

我的第一个想法是在summarise 中使用paste(),但这不起作用。

df %>% group_by(id) %>% summarise(paste(A))
Error: expecting a single value

Hadley 和 Romain 在 GitHub 问题中讨论了类似的问题,但我不太明白它是如何直接应用的。似乎应该有一个非常简单的解决方案,尤其是因为paste() 通常确实返回单个值。

【问题讨论】:

标签: r dplyr


【解决方案1】:

我的数据框是:
col1 col2

1           one 
1           one more
2           two
2           two
3           three

我需要总结如下:

col1 col3

1           one, one more
2           two
3           three

以下代码成功了:

    df <- data.frame(col1 = c(1,1,2,2,3), col2 = c("one", "one more", "two", "two", "five"))

    df %>%
            group_by(col1) %>%
            summarise( col3 = toString(unique(col2)))

【讨论】:

  • 但这实际上会使其成为一个字符串。逗号分隔的字符串。如何获取类似 1. Design_ID 2. 设计向量而不是逗号分隔值的数据。
【解决方案2】:

您需要折叠粘贴中的值

df %>% group_by(id) %>% summarise(vector=paste(A, collapse=" "))

【讨论】:

  • 哇,好的。从未使用过collapse,因为它看起来与sep 非常相似。这就是我喜欢 R 的地方!
  • @MrFlick,您能否告知我如何使用您的解决方案仅粘贴 A 的唯一值,而 A 的重复值对应于 ID?谢谢!
  • @Alex 你可以使用vector=paste(unique(A), collapse=" ")
  • @MrFlick,谢谢!我会尝试数据,并会及时通知您!
猜你喜欢
  • 2019-07-28
  • 2021-06-09
  • 2022-01-04
  • 2017-07-06
  • 1970-01-01
  • 2023-03-06
  • 2023-03-09
  • 2018-09-14
相关资源
最近更新 更多