我有这种数据:
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"))
答案 0 :(得分:1)
以下内容可能会满足您的需求。
只需从S
获取所有唯一值,然后将其用作参数into
。
into <- unique(unlist(strsplit(S[[1]], ",")))
separate(S, col = "Source", into = into, sep = ",")