【问题标题】:pivoting and aggregating table lines旋转和聚合表格线
【发布时间】:2021-04-04 00:53:48
【问题描述】:

我有一个名为 episodes 的数据框,其中每一行都是来自不同主题 (numadm) 的不同插曲。每集都有一个“开始”和一个“结束”时间。一个主题可以有 1 集或多集(所以 1 到多行)

表格的格式是这样的:

num adm       start     end 

我想获得一个表格,其中每个主题 (numadm) 只有一行,每集的开头和结尾都有新列 (start1, end1, start2, end2, start3, end3)

num adm     start 1   end 1    start2     end2 

我阅读了有关 pivot.wider 的信息,但不确定它在这里如何应用。

有什么想法吗? 感谢您的帮助。

【问题讨论】:

  • 欢迎来到stackoverflow。请在此处查看 stackoverflow.com/help/minimal-reproducible-example>。要提供示例数据,请使用dput()

标签: r


【解决方案1】:

既然你还没有分享任何例子,让我们创建一个小例子

df <- read.table(text = "num_adm    start   end
1   a   b
2   c   d
2   e   f
3   g   h
3   i   j
3   k   l
", header = T)

现在要在tidyverse 中得到想要的结果,就这样做

library(tidyverse)

df %>% group_by(num_adm) %>%
  mutate(d = row_number()) %>%
  pivot_longer(cols = c(start, end)) %>%
  mutate(name = paste0(name, "_" ,d)) %>%
  select(-d) %>%
  pivot_wider(id_cols = num_adm, names_from = name, values_from = "value")

# A tibble: 3 x 7
# Groups:   num_adm [3]
  num_adm start_1 end_1 start_2 end_2 start_3 end_3
    <int> <chr>   <chr> <chr>   <chr> <chr>   <chr>
1       1 a       b     NA      NA    NA      NA   
2       2 c       d     e       f     NA      NA   
3       3 g       h     i       j     k       l 

【讨论】:

  • 很高兴它有帮助。请在 SO 上按照通常的意愿接受并投票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多