fork download
  1. library(magrittr)
  2. library(data.table)
  3.  
  4. # create fake data
  5. d <- data.table(id = 1:20)
  6. d[, trt1 := sample(c(LETTERS[1:3], NA) %>% rep(50) %>% sample(20))]
  7. d[, trt2 := sample(c(LETTERS[1:3], NA) %>% rep(50) %>% sample(20))]
  8. d
  9.  
  10. # 先 melt() 轉成 long table 再 dcast() 按 value 計數
  11. d.long <- melt(d, id.vars = "id", variable.name = "TRT")
  12. d.trans <- dcast(d.long, id ~ value, fun.aggregate = length)
  13.  
  14. # 原資料前五列
  15. d[1:5, ]
  16. # 轉換後前五列;數字表示出現次數,NA欄表示NA出現次數
  17. d.trans[1:5, ]
  18.  
  19. # d.trans 改格式成Yes或空格
  20. data.table(id = d.trans$id, ifelse(d.trans[, -1] > 0, "Yes", ""))
  21.  
Success #stdin #stdout 0.28s 189952KB
stdin
Standard input is empty
stdout
    id trt1 trt2
 1:  1    C    A
 2:  2    B    B
 3:  3    C    A
 4:  4   NA    C
 5:  5    A   NA
 6:  6    B    B
 7:  7    B    C
 8:  8    B    B
 9:  9    B    B
10: 10   NA   NA
11: 11    A    C
12: 12    A    B
13: 13   NA    B
14: 14   NA   NA
15: 15   NA    C
16: 16    A    B
17: 17    A    C
18: 18   NA    A
19: 19    A    A
20: 20    B    B
   id trt1 trt2
1:  1    C    A
2:  2    B    B
3:  3    C    A
4:  4   NA    C
5:  5    A   NA
   id A B C NA
1:  1 1 0 1  0
2:  2 0 2 0  0
3:  3 1 0 1  0
4:  4 0 0 1  1
5:  5 1 0 0  1
    id   A   B   C  NA
 1:  1 Yes     Yes    
 2:  2     Yes        
 3:  3 Yes     Yes    
 4:  4         Yes Yes
 5:  5 Yes         Yes
 6:  6     Yes        
 7:  7     Yes Yes    
 8:  8     Yes        
 9:  9     Yes        
10: 10             Yes
11: 11 Yes     Yes    
12: 12 Yes Yes        
13: 13     Yes     Yes
14: 14             Yes
15: 15         Yes Yes
16: 16 Yes Yes        
17: 17 Yes     Yes    
18: 18 Yes         Yes
19: 19 Yes            
20: 20     Yes