将组合值转换为 R 中的虚拟变量

Convert combination value into dummies in R

我有这样的数据集:

id<-c(1:6)
value<-c(" ","1", "1 6","1 777"," ", " ")
df<-data.frame(id, value)

现在我想将它转换为每个值的虚拟变量,并使用 0 和 1 来表示“是”和“否”。换句话说,我不想计算组合值,而是想计算每个观察值的每个值。例如,第一个obs是NA,所以只有NA是yes,第三个obs选择组合值“1”和“6”,所以在第3行中,cols“1”和col“6”被标记为“ 1”(是)。理想情况下 table 看起来像这样(请忽略数字后面的点):

id 1 6 777 NA
1 0  0  0  1
2 1  0  0  0
3 1  1  0  0
4 1  0  1  0
5 0  0  0  1
6 0  0  0  1

我试过使用包“fastdummies”,我的代码是这样的:

df<-dummy_cols(df,
             select_columns="value",
             split="")  

效果不是很好。这种情况有什么解决办法吗?非常感谢。

此外,当它吐出虚拟变量时,cols 名称如“value_”、“value_6”,是否有任何方法可以将名称显示为值,如“1”、“ 6”,“777”,“NA”。非常感谢~~!

我们可能需要将 space 元素转换为 NA

library(dplyr)
library(fastDummies)
library(tidyr)
library(stringr)
df %>%
     na_if(" ") %>% 
     dummy_cols("value", split = " ", remove_selected_columns = TRUE) %>%  
     mutate(across(starts_with('value_'), replace_na, 0))  %>%
     rename_with(~ str_remove(.x, "value_"), starts_with("value_"))

-输出

  id 1 6 777 NA
1  1 0 0   0  1
2  2 1 0   0  0
3  3 1 1   0  0
4  4 1 0   1  0
5  5 0 0   0  1
6  6 0 0   0  1