R语言 基于两列创建二进制变量

bfhwhh0e  于 2022-12-20  发布在  其他
关注(0)|答案(2)|浏览(234)

我试图创建一个二元变量,如果一个人在一年中的四个季度都没有挣到100美元或更多,他们就被列为0;如果某个人确实挣了100美元或更多,则将其列为1。下面是我尝试生成的所需输出的示例。我已经创建了Binary列,我只需要Binary 2

dd <- read.table(text="
MPI     yrqtr  Wage Binary Binary2
PersonA 20101  100    1      1
PersonA 20102  100    1      1
PersonA 20103  100    1      1  
PersonA 20104  100    1      1
PersonA 20111  100    1      0
PersonA 20112  100    1      0
PersonA 20113  100    1      0
PersonA 20114   50    0      0", header=T)
mv1qrgav

mv1qrgav1#

这里我们可以按年份和人分组,然后使用all()查找一年中的所有记录,我使用+0将布尔值转换为1/0。

dd %>% 
  group_by(MPI, year=substr(yrqtr,1,4)) %>% 
  mutate(Binary2 = all(Wage>=100)+0)
euoag5mw

euoag5mw2#

以下是类似的方法:

dd %>%
  group_by(group = str_extract(yrqtr, '\\d{4}')) %>% 
  mutate(Binary = ifelse(Wage >= 100, 1, 0),
         Binary2 = ifelse(sum(Binary)==4, 1, 0)) %>% 
  ungroup() %>% 
  select(-group)
MPI     yrqtr  Wage Binary Binary2
  <chr>   <int> <int>  <dbl>   <dbl>
1 PersonA 20101   100      1       1
2 PersonA 20102   100      1       1
3 PersonA 20103   100      1       1
4 PersonA 20104   100      1       1
5 PersonA 20111   100      1       0
6 PersonA 20112   100      1       0
7 PersonA 20113   100      1       0
8 PersonA 20114    50      0       0

相关问题