r - 如何在保留 R 中的某些变量的同时将长整形为宽

标签 r

<分区>

我有一个数据框,它并不是真正的“长格式”,但它的格式比我想要的要长。我想将它压缩成一个“宽格式”,将与 id 相关的所有信息都放在一行中。现在,一些信息在每一行上重复(例如下面示例中的日期),而其他信息需要在合并行时保留(例如下面的类型列)。谢谢!

id <- c(1000, 1000, 1000, 1001, 1001, 1001)
type <- c("A", "B", "B", "C", "C", "A")
dates <- c("10/5/2019", "10/5/2019", "10/5/2019", "9/17/2020", "9/17/2020", "9/17/2020")
df <- as.data.frame(cbind(id, type, dates))
df
    id type     dates
1 1000    A 10/5/2019
2 1000    B 10/5/2019
3 1000    B 10/5/2019
4 1001    C 9/17/2020
5 1001    C 9/17/2020
6 1001    A 9/17/2020

我希望它看起来像这样:

enter image description here

最佳答案

另一个只使用 tidyverse 的选项:

library(tidyverse)
#Code
df %>% group_by(id) %>% mutate(idv=paste0('type.',1:n())) %>%
  pivot_wider(names_from = idv,values_from=type)

输出:

# A tibble: 2 x 5
# Groups:   id [2]
  id    dates     type.1 type.2 type.3
  <chr> <chr>     <chr>  <chr>  <chr> 
1 1000  10/5/2019 A      B      B     
2 1001  9/17/2020 C      C      A   

或者使用row_number()(感谢@r2evans):

#Code 2
df %>% group_by(id) %>% mutate(idv=paste0('type.',row_number())) %>%
  pivot_wider(names_from = idv,values_from=type)

输出:

# A tibble: 2 x 5
# Groups:   id [2]
  id    dates     type.1 type.2 type.3
  <chr> <chr>     <chr>  <chr>  <chr> 
1 1000  10/5/2019 A      B      B     
2 1001  9/17/2020 C      C      A     

关于r - 如何在保留 R 中的某些变量的同时将长整形为宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64216839/

相关文章:

r - 如何制作堆积面积图?

r - 在 R 中添加具有增量的新列

r - 使用 r 找到双峰分布中的局部最小值

R,如何矢量化此操作

r - cumsum() 截至并包括 dplyr 中的当前日期

r - str_extract_all : return all patterns found in string concatenated as vector

r - 列表中的 bind_rows 即使 class() 不同

在最近的更新之后,使用 Shinyjs 重置 event_data 似乎不再起作用

r - 在不知道 ggplot2 中的标签的情况下更改标签的字体大小

r - 在 xyplot 中用误差线绘制 SE