如果R中的值相同,如何折叠数据框行?

wfsdck30  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(124)

假设我创建了以下数据框:

set.seed(215)
df <- data.frame(names = rep(letters[1:3], 4),
                class = sample(c("x","y","z"), 12, replace = TRUE))

字符串
这将生成以下 Dataframe :

df
   names class
1      a     z
2      b     z
3      c     x
4      a     x
5      b     y
6      c     x
7      a     x
8      b     z
9      c     y
10     a     y
11     b     z
12     c     x


我想折叠行,使nameclass的每个组合只出现一次。在上面的示例数据中,我会有这样的:

df2
  names class
1     a     z
2     a     x
3     a     y
4     b     z
5     b     y
6     c     x
7     c     y


我试过:

new_df <- df %>%
        tidyr::pivot_wider(., names_from = names, values_from = class) %>%
        tibble::rownames_to_column() %>%  
        pivot_longer(-rowname) %>% 
        pivot_wider(names_from=rowname, values_from=value) %>%
        as.data.frame()


但是,这会导致以下警告消息:

Warning message:
Values from `class` are not uniquely identified; output will contain list-cols.
• Use `values_fn = list` to suppress this warning.
• Use `values_fn = {summary_fun}` to summarise duplicates.
• Use the following dplyr code to identify duplicates.
  {data} %>%
  dplyr::group_by(names) %>%
  dplyr::summarise(n = dplyr::n(), .groups = "drop") %>%
  dplyr::filter(n > 1L)


生成的df看起来像这样:

name          1
1    a z, x, x, y
2    b z, y, z, z
3    c x, x, y, x


请帮助我确定最简单的方法来做到这一点。我正试图用base R或tidyverse找出一个解决方案,但我很感激任何帮助。
谢谢你,谢谢

  • 编辑以纠正所需结果的格式。
kmpatx3s

kmpatx3s1#

如注解中所述,最简单的方法是unique(df)distinct(df)(两者给予相同的结果)。

相关问题