R:有条件地对其他变量进行独特观察 - 从行到其他列

时间:2018-04-17 17:45:51

标签: r

我是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)  

非常感谢!

1 个答案:

答案 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")