首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dplyr为两个因素变量生成完整的虚拟交互项集

dplyr为两个因素变量生成完整的虚拟交互项集
EN

Stack Overflow用户
提问于 2019-01-11 09:04:39
回答 1查看 657关注 0票数 0

假设我有一个两因素变量,一个在我的例子中有许多因素(multi.factor),另一个只有两个因素(two.factor),并且本身是一个哑元。

代码语言:javascript
复制
df <- data.frame(two.factor = rep(c(0,1), 4)) %>%
  mutate(multi.factor = ceiling(row_number()/2))

df

#>   two.factor multi.factor
#> 1          0            1
#> 2          1            1
#> 3          0            2
#> 4          1            2
#> 5          0            3
#> 6          1            3
#> 7          0            4
#> 8          1            4

如何使用dplyr或其他tidyverse方法为这两个变量创建一组虚拟交互术语?换句话说,我需要4*1=4个新的虚拟变量,如果two.factor为1,multi.factor是交互作用项中命名的因子,则为1,否则为0。要做到这一点还有很长的路要走:

代码语言:javascript
复制
df %<>%
  mutate(interact.1 = case_when(multi.factor == 1 & two.factor == 1 ~ 1, TRUE ~ 0)) %>%
  mutate(interact.2 = case_when(multi.factor == 2 & two.factor == 1 ~ 1, TRUE ~ 0)) %>%
  mutate(interact.3 = case_when(multi.factor == 3 & two.factor == 1 ~ 1, TRUE ~ 0)) %>%
  mutate(interact.4 = case_when(multi.factor == 4 & two.factor == 1 ~ 1, TRUE ~ 0))

df
#>   two.factor multi.factor interact.1 interact.2 interact.3 interact.4
#> 1          0            1          0          0          0          0
#> 2          1            1          1          0          0          0
#> 3          0            2          0          0          0          0
#> 4          1            2          0          1          0          0
#> 5          0            3          0          0          0          0
#> 6          1            3          0          0          1          0
#> 7          0            4          0          0          0          0
#> 8          1            4          0          0          0          1

(我还没有创建multi.factortwo.factor的实际因子,我只是使用整数来表示因子级别,以保持复制的简单性。在我的实际数据中,multi.factor是字符串。我怀疑tidyverse解决方案不会在意。)

EN

回答 1

Stack Overflow用户

发布于 2019-01-11 20:23:15

假设multi.factor是一个因子,您可以使用map为每个级别创建一个新列:

代码语言:javascript
复制
library(tidyverse)

df <- data.frame(two.factor = rep(c(0,1), 4)) %>%
  mutate(multi.factor = as.factor(ceiling(row_number()/2)))

df %>% 
  bind_cols(
    map( levels(df$multi.factor),
         function(x)
           df %>% transmute(!!paste0("interact.",x) := (multi.factor == x) * two.factor)
    )
  )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54139048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档