基于另一个变量的值创建虚拟变量?

问题描述 投票:0回答:2

我有一个大型数据集,具有以下结构的多列

    A    B      
1.  1.   D1  
2.  1.   D2
3.  2    D2
4.  3.   D1
5.  3.   D2

[我正在尝试基于列A中的唯一观察来创建一个新的数据框,其中的虚拟变量“ Dummy”编码为1 = D1、2 = D2、3 =两者都像这样:

    A.  Dummy
1.  1.   3
2.  2.   2
3.  3.   3

知道我该如何处理吗?

r function loops dataframe
2个回答
0
投票

您可以使用aggregate

aggregate(B ~ A, df, function(x) if(all(x == "D1")) 1 else if(all(x == "D2")) 2 else 3)

#   A B
# 1 1 3
# 2 2 2
# 3 3 3

0
投票

另一个可能的解决方案:

df %>% 
  group_by(A) %>% 
  summarise(B = paste0(B, collapse = "_")) %>% 
  mutate(Dummy = case_when(
    B == "D1" ~ 1,
    B == "D2" ~ 2,
    B == "D1_D2" |  B == "D2_D1" ~ 3,
    TRUE ~ NA_real_
  )) %>% 
  select(-B)

结果

# A tibble: 3 x 2
      A Dummy
  <dbl> <dbl>
1     1     3
2     2     2
3     3     3
© www.soinside.com 2019 - 2024. All rights reserved.