繁体   English   中英

如何从另一列的组合中创建多个列?

[英]How to create multiple columns from combination of pairs of another column?

我正在尝试创建多个列,这些列是基于另一列的对组合。 例如,在这个简化的forcats::gss_cat数据集中,有一个marital列具有三个值: SeparatedDivorcedMarried 我可以使用mutatecase_when创建新的列,例如Separated_Divorced ,如下所示:

简化数据集

data <- forcats::gss_cat %>% 
  filter(marital != "No answer") %>% 
  filter(marital != "Never married") %>% 
  filter(marital != "Widowed")

data %>% count(marital)

marital           n
Separated       743         
Divorced       3383         
Married       10117 

基于对手动创建列

Separated_Divorced _离婚 , Divorced_Married _已婚 , Married_Separated

data <- data %>% 
  mutate(Separated_Divorced = case_when(marital == "Separated" ~ "Separated",
                                        marital == "Divorced" ~ "Divorced"),
         Divorced_Married = case_when(marital == "Divorced" ~ "Divorced",
                                      marital == "Married" ~ "Married"),
         Married_Separated = case_when(marital == "Married" ~ "Married",
                                       marital == "Separated" ~ "Separated")) 

是否有 function 或一种简单的方法来创建这些列而无需手动创建与这种方法不同的列?

我们可以在“婚姻”的levels上使用combn

library(dplyr)
library(stringr)
data2 <- combn(levels(data$marital), 2, FUN = \(x) 
   data %>%  
     transmute(!! str_c(x, collapse="_") := 
        case_when(as.character(marital) %in% x~ as.character(marital))), 
          simplify = FALSE) %>%
    bind_cols(data, .)

-输出

> head(data2, 2)
# A tibble: 2 × 24
   year marital    age race  rincome        partyid relig denom tvhours `No answer_Neve… `No answer_Sepa… `No answer_Divo… `No answer_Wido… `No answer_Marr… `Never married_…
  <int> <fct>    <int> <fct> <fct>          <fct>   <fct> <fct>   <int> <chr>            <chr>            <chr>            <chr>            <chr>            <chr>           
1  2000 Divorced    48 White $8000 to 9999  Not st… Prot… Bapt…      NA <NA>             <NA>             Divorced         <NA>             <NA>             <NA>            
2  2000 Divorced    25 White Not applicable Not st… None  Not …       1 <NA>             <NA>             Divorced         <NA>             <NA>             <NA>            
# … with 9 more variables: Never married_Divorced <chr>, Never married_Widowed <chr>, Never married_Married <chr>, Separated_Divorced <chr>,
#   Separated_Widowed <chr>, Separated_Married <chr>, Divorced_Widowed <chr>, Divorced_Married <chr>, Widowed_Married <chr>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM