R 创建一列,指示一组列中是否存在值
我有一张这样的桌子:R 创建一列,指示一组列中是否存在值,r,data.table,R,Data.table,我有一张这样的桌子: table1 <- data.table(ID = 1:10, col1 = c("x1", "x2", "x3", NA, NA, NA, "x7", "x8", "x9", "x10"), col2 = c("x1", &q
table1 <- data.table(ID = 1:10,
col1 = c("x1", "x2", "x3", NA, NA, NA, "x7", "x8", "x9", "x10"),
col2 = c("x1", "x2", "x3", "x4", NA, NA, "x7", NA, "x9", "x10"),
col3 = c("x1", NA, NA, "x4", "x5", "x6", NA, "x8", NA, "x10"))
ID col1 col2 col3
1: 1 x1 x1 x1
2: 2 x2 x2 <NA>
3: 3 x3 x3 <NA>
4: 4 <NA> x4 x4
5: 5 <NA> <NA> x5
6: 6 <NA> <NA> x6
7: 7 x7 x7 <NA>
8: 8 x8 <NA> x8
9: 9 x9 x9 <NA>
10: 10 x10 x10 x10
features
列反映了表1
中对应的ID
的组合。如何操作?在base R
中,可以使用apply()
:
输出:
table1
ID col1 col2 col3 Var
1: 1 x1 x1 x1 col1:col2:col3
2: 2 x2 x2 <NA> col1:col2
3: 3 x3 x3 <NA> col1:col2
4: 4 <NA> x4 x4 col2:col3
5: 5 <NA> <NA> x5 col3
6: 6 <NA> <NA> x6 col3
7: 7 x7 x7 <NA> col1:col2
8: 8 x8 <NA> x8 col1:col3
9: 9 x9 x9 <NA> col1:col2
10: 10 x10 x10 x10 col1:col2:col3
# A tibble: 10 x 2
ID val
<int> <chr>
1 1 col1:col2:col3
2 2 col1:col2
3 3 col1:col2
4 4 col2:col3
5 5 col3
6 6 col3
7 7 col1:col2
8 8 col1:col3
9 9 col1:col2
10 10 col1:col2:col3
#一个tible:10x2
ID val
1第1列:第2列:第3列
2 col1:col2
3 col1:col2
第4列第2列:第3列
5列3
6 col3
7 col1:col2
8 col1:col3
9 col1:col2
10第1列:第2列:第3列
在base R
中,可以使用apply()
:
输出:
table1
ID col1 col2 col3 Var
1: 1 x1 x1 x1 col1:col2:col3
2: 2 x2 x2 <NA> col1:col2
3: 3 x3 x3 <NA> col1:col2
4: 4 <NA> x4 x4 col2:col3
5: 5 <NA> <NA> x5 col3
6: 6 <NA> <NA> x6 col3
7: 7 x7 x7 <NA> col1:col2
8: 8 x8 <NA> x8 col1:col3
9: 9 x9 x9 <NA> col1:col2
10: 10 x10 x10 x10 col1:col2:col3
# A tibble: 10 x 2
ID val
<int> <chr>
1 1 col1:col2:col3
2 2 col1:col2
3 3 col1:col2
4 4 col2:col3
5 5 col3
6 6 col3
7 7 col1:col2
8 8 col1:col3
9 9 col1:col2
10 10 col1:col2:col3
#一个tible:10x2
ID val
1第1列:第2列:第3列
2 col1:col2
3 col1:col2
第4列第2列:第3列
5列3
6 col3
7 col1:col2
8 col1:col3
9 col1:col2
10第1列:第2列:第3列
由于您使用的是数据表
,您可以执行以下操作:
table1[, .(features = paste(names(table1)[-1][!is.na(.SD)], collapse = ":")),
ID]
## ID features
## 1: 1 col1:col2:col3
## 2: 2 col1:col2
## 3: 3 col1:col2
## 4: 4 col2:col3
## 5: 5 col3
## 6: 6 col3
## 7: 7 col1:col2
## 8: 8 col1:col3
## 9: 9 col1:col2
## 10: 10 col1:col2:col3
或者您可以熔化
数据,然后使用粘贴
进行聚合:
melt(table1, "ID", na.rm = TRUE)[, .(features = paste(variable, collapse = ":")), ID]
由于您使用的是
data.table
,因此可以执行以下操作:
table1[, .(features = paste(names(table1)[-1][!is.na(.SD)], collapse = ":")),
ID]
## ID features
## 1: 1 col1:col2:col3
## 2: 2 col1:col2
## 3: 3 col1:col2
## 4: 4 col2:col3
## 5: 5 col3
## 6: 6 col3
## 7: 7 col1:col2
## 8: 8 col1:col3
## 9: 9 col1:col2
## 10: 10 col1:col2:col3
或者您可以熔化
数据,然后使用粘贴
进行聚合:
melt(table1, "ID", na.rm = TRUE)[, .(features = paste(variable, collapse = ":")), ID]