我想基于现有的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
中具有相同的值时,使用粘贴
进行合并。我在构建可以做到这一点的函数时遇到了麻烦。你能帮我吗?
我对dplyr
或data. table
都很满意。
在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创建。