我是R.的新手。我很难找到适合以下问题的解决方案:
我的数据框看起来大致如下:
ID Att
1 a
1 b
1 c
2 d
3 e
3 f
4 g
我想将其转换为以下格式的新df:
ID Att_1 Att_2 ... Att_n
1 a b c
2 d N/A N/A
3 e f N/A
4 g N/A N/A
其中列数取决于“ID”中唯一“Att”的最大计数(此处为三)。新数据帧中列数的生成(即'n')应该是自动化的,并且取决于:
max_ID_count <- table(df$ID)
n <- max(max_ID_count)
非常感谢!
答案 0 :(得分:0)
我们可以创建一个序列列,然后创建spread
library(tidyverse)
df1 %>%
group_by(ID) %>%
mutate(rn = paste0("Att_", row_number())) %>%
spread(rn, Att)
# A tibble: 4 x 4
# Groups: ID [4]
# ID Att_1 Att_2 Att_3
# <int> <chr> <chr> <chr>
#1 1 a b c
#2 2 d <NA> <NA>
#3 3 e f <NA>
#4 4 g <NA> <NA>
或dcast
data.table
library(data.table)
dcast(setDT(df1), ID ~ paste0("Att_", rowid(ID)), value.var = "Att")