R:将多个二进制列转换为一个因子变量,其因子为二进制列

  • 本文关键字:二进制 变量 一个 转换 r binary-data
  • 更新时间 :
  • 英文 :


我得到了一个可怕的数据集,我正在努力清理:272个(字符(变量和343个观测值。它由许多二元变量组成,这些变量本可以概括为一个具有多个因素的变量。因此,与其问";你是自雇还是受雇"并且给定选项1〃;"个体经营";,2〃;就业";并且可能是一个3〃;"无/其他";,该集合具有两个变量:v1.selfused和v2.used,其中选项1〃;是";和2〃;否";。

我现在需要将几个二进制变量合并为一个。由于它们是字符,我需要将它们转换为因子,我做到了(参见示例(。

### datasetdataset
v1 <- as.character(c("yes", "yes", "no", "yes", "yes", "no", "yes","no", "no", NA ))
v2 <- as.character(c("no","no","no","no","no","yes","no","yes", "no", NA))
v3 <- as.character(c("no","no", "yes", "no","no","no","no","no", "yes", NA))
df <- data.frame(v1,v2,v3)
library(tidyverse)
## dataframe -> tibble
df.t <- as_tibble(df)
## convert into 1/0 factor
df.t %>%
mutate_if(is.character, as.factor) %>% 
mutate_at(vars(1:3), ~fct_recode(., "1" = "yes", 
"0" = "no"))

我走这条路是因为我有很多二进制";束";我需要能够通过vars((进行选择。在转换了所有必要的捆绑包之后,我将它们保存在一个新的data.frame中,因为我不确定是否使用tibbles。我的目标是将变量v与因子级别v1、v2和v3结合起来。

这个确切的问题已经在8年前发布在这个帖子中了。我尝试了他们提到的方法,但似乎不起作用。它们可能是";"过时";?我最终得到的要么是比以前更多的观察结果——这很有趣——要么是错误。在8年的时间里,在研发R的过程中一定发生了一些事情,这可能会让这个过程变得更容易。

感谢大家的帮助!

我猜您想还原一个"一个热编码";变量的。这里有一个快速的方法。

apply(df ,1,(x) names(which(x == "yes"))) |>
purrr::map_chr(~ifelse(length(.x) == 0, NA_character_, .x))
#+  [1] "v1" "v1" "v3" "v1" "v1" "v2" "v1" "v2" "v3" NA  

一种不同的方法是:

df |>
mutate(ID = row_number()) |>
pivot_longer(cols = c(v1,v2,v3), names_to = "var") |>
filter(value == "yes")
##>      ID var   value
##>   <int> <chr> <chr>
##> 1     1 v1    yes  
##> 2     2 v1    yes  
##> 3     3 v3    yes  
##> 4     4 v1    yes  
##> 5     5 v1    yes  
##> 6     6 v2    yes  
##> 7     7 v1    yes  
##> 8     8 v2    yes  
##> 9     9 v3    yes  

相关内容

  • 没有找到相关文章

最新更新