连接每组一列的值[重复]

问题描述 投票:1回答:2

我想连接现在在一列中的每个组的值。以下是我想要争论的数据框的简短版本。

library(tidyverse)

df <- tibble::tribble(
  ~county,  ~party,
      "A",   "VVD",
      "A",    "GL",
      "A", "Local",
      "B",   "D66",
      "B", "Local"
  )

现在我想为每个县创建一行,其中所有各方都在他们自己的列中:

df2 <- tibble::tribble(
  ~county, ~party1, ~party2, ~party3,
      "A",   "VVD",    "GL", "Local",
      "B",   "D66", "Local",      NA
  )

稍后与unite()连接并替换逗号的下划线并删除NA。

df2 %>%
  unite(party, c("party1", "party2", "party3")) %>%
  mutate(party = gsub("_NA", "", party),
         party = gsub("_", ", ", party))

我想要的df输出:

  county party         
  <chr>  <chr>         
1 A      VVD, GL, Local
2 B      D66, Local
r tidyr
2个回答
1
投票

我们可以通过创建序列列和spread来实现

library(tidyverse)
df %>%
   group_by(county) %>% 
   mutate(v1 = paste0('party', row_number())) %>% 
   spread(v1, party)
# A tibble: 2 x 4
# Groups:   county [2]
#  county party1 party2 party3
#  <chr>  <chr>  <chr>  <chr> 
#1 A      VVD    GL     Local 
#2 B      D66    Local  <NA>  

对于第二个输出,我们将'county'和paste分组为'party'的元素

df %>%
  group_by(county) %>%
  summarise(party = toString(party))
# A tibble: 2 x 2
#  county party         
#  <chr>  <chr>         
#1 A      VVD, GL, Local
#2 B      D66, Local   

0
投票
df %>%
    group_by(county) %>%
    dplyr::summarise( paste0(party, collapse = ", "))

如果有任何不清楚的地方,你应该将?group_by?paste0等)提示给R控制台。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.