提问者:小点点

粘贴不同行的字符串值,如果另一列的值相同[重复]


我想基于现有的dataframe创建一个新的dataframe。如标题所示,如果另一列中的值是等效的,我想将所有字符串值粘贴到某一列中。

由于我的写作技巧很差,我想我不太清楚我这是什么意思。为了澄清,我举了一个例子。

现有数据框

如果我有这样的东西:

DF <- data.frame(
    ID = c(1,2,2,3,3,3,4,4,4,4),
    value = c("I","ate","cereals","for","breakfast","it","was","delicious","!!!",":)"))  

新数据框

我想创建这样的东西:

DF2 <- data.frame(
    ID = c(1,2,3,4),
    value = c(paste("I"), paste("ate","cereals"), paste("for","breakfast","it"), paste("was","delicious","!!!",":)")))

当列value中的所有字符串在列ID中具有相同的值时,使用粘贴进行合并。我在构建可以做到这一点的函数时遇到了麻烦。你能帮我吗?

我对dplyrdata. table都很满意。


共2个答案

匿名用户

dplyr中,您可以使用group_by摘要

DF %>%
    group_by(ID) %>%
    summarise(value = paste(value, collapse = " "))
## A tibble: 4 x 2
#     ID value
#  <dbl> <chr>
#1    1. I
#2    2. ate cereals
#3    3. for breakfast it
#4    4. was delicious !!! :)

匿名用户

您只需group_by(ID)用连接函数总结。这里我使用str_c折叠参数。

library(tidyverse)
DF <- data.frame(
  ID = c(1, 2, 2, 3, 3, 3, 4, 4, 4, 4),
  value = c("I", "ate", "cereals", "for", "breakfast", "it", "was", "delicious", "!!!", ":)")
)

DF %>%
  group_by(ID) %>%
  summarise(value = str_c(value, collapse = " "))
#> # A tibble: 4 x 2
#>      ID value               
#>   <dbl> <chr>               
#> 1     1 I                   
#> 2     2 ate cereals         
#> 3     3 for breakfast it    
#> 4     4 was delicious !!! :)

由reprex包(v0.2.0)于2018-08-26创建。