我有一个大型数据集,具有以下结构的多列
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
知道我该如何处理吗?
您可以使用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
另一个可能的解决方案:
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