繁体   English   中英

加宽 R 数据框

[英]Widen R dataframe

我正在尝试扩大 R 中的数据框,但似乎以一种不寻常的方式进行,因为在此处进行了大量搜索后,我无法找到一种简单的方法。

假设我有一个这样的数据框,其中 ID 是一个数字,用于标识一个独特的人,而这个独特的人可能有几个与之相关的代码:

ID<-c(1, 2, 2, 2, 3, 3,4)
CODE<-c(123, 938, 293, 456, 203, 203, 91)
df <- data.frame(ID, CODE)

我想加宽它,以便每个 ID 只有一行,并将代码添加到其他列。 这应该会导致生成与 ID 的代码数量一样多的新列,该 ID 的代码数量最多。 例如,如果一个 ID 只有一个代码,那么第一个之后所有新生成的列都应该用 NA 填充。 生成的数据框应如下所示:

ID 代码1 代码2 代码3
1 123 不适用 不适用
2 938 293 456
3 203 203 不适用
4 91 不适用 不适用

如果也可以删除重复的代码,结果实际上是这样的(这样 ID 3 的第二次出现的 203 就变成了 NA),那就更好了:

ID 代码1 代码2 代码3
1 123 不适用 不适用
2 938 293 456
3 203 不适用 不适用
4 91 不适用 不适用

我可以通过连接代码(通过 group_by 和 summarise)然后将代码分成单独的列来做到这一点,但我想有一种更直接的方法来做到这一点。

感谢您的任何建议!

library(tidyverse)
df %>%
  distinct(ID, CODE) %>%
  group_by(ID) %>%
  mutate(col = paste0("CODE", row_number())) %>%
  ungroup() %>%
  pivot_wider(names_from = col, values_from = CODE)

结果

# A tibble: 4 x 4
     ID CODE1 CODE2 CODE3
  <dbl> <dbl> <dbl> <dbl>
1     1   123    NA    NA
2     2   938   293   456
3     3   203    NA    NA
4     4    91    NA    NA

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM