制作列值的列

时间:2019-02-06 18:33:41

标签: r

我有这种数据:

view(S)
# A tibble: 10 x 1
   Source                
   <chr>                 
 1 137                   
 2 137,111,43,34,34,43,22
 3 137                   
 4 137                   
 5 137,45,34,63,34,45,22 
 6 137,78,63             
 7 137.63                
 8 137                   
 9 137,83,78             
10 137,132,128   

我想将每个不同的值都设为自己的列,如果该值存在于一行中,则该值应为x,否则不应该插值。

示例:

  137 111 43 ...
1   x           
2   x   x  x
3   x
4   x
5   x
...

我的想法是使用separate函数,然后将所有非NA值替换为x:

library(tidyr)
separate(S, col = "Source", into = c("137", "111", "43"), sep = ",")


 # A tibble: 10 x 3
   x      Y     Z    
   <chr>  <chr> <chr>
 1 137    NA    NA   
 2 137    111   43   
 3 137    NA    NA   
 4 137    NA    NA   
 5 137    45    34   
 6 137    78    63   
 7 137.63 NA    NA   
 8 137    NA    NA   
 9 137    83    78   
10 137    132   128  

但是,实际上,不重复数字的数量比示例中的要大得多。

这是一个小东西:

structure(list(Source = c("137", "137,111,43,34,34,43,22", "137", 
"137", "137,45,34,63,34,45,22", "137,78,63", "137.63", "137", 
"137,83,78", "137,132,128")), row.names = c(NA, -10L), class = c("tbl_df", 
"tbl", "data.frame"))

1 个答案:

答案 0 :(得分:1)

以下内容可能会满足您的需求。
只需从S获取所有唯一值,然后将其用作参数into

into <- unique(unlist(strsplit(S[[1]], ",")))
separate(S, col = "Source", into = into, sep = ",")