将组合值转换为 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
我有这样的数据集:
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