如果另一列中的值相同,则粘贴不同行中的字符串值

时间:2018-08-27 01:01:00

标签: r dataframe data.table

我想基于现有的dataframe创建一个新的paste。就像标题所暗示的,如果另一列中的值相等,我想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

来自列paste的所有字符串在列ID中具有相同值时,将使用dplyr合并。我在构建可以做到这一点的功能时遇到了麻烦。你能帮我吗?

我对data.tableasync function asyncMap(array, callback) { let results = []; for (let index = 0; index < array.length; index++) { const result = await callback(array[index], index, array); results.push(result); } return results; } 都很满意。

2 个答案:

答案 0 :(得分:2)

dplyr中,您可以将group_bysummarise一起使用

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 !!! :)

答案 1 :(得分:1)

您只能使用串联功能来group_by(ID)summarise。在这里,我将str_ccollapse参数一起使用。

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 package(v0.2.0)于2018-08-26创建。