R 如何根据其他变量中的值为每个个体创建二进制变量?
所以我有一个包含4个人的数据集。每个个体在不同的时间段进行测量。在R中:R 如何根据其他变量中的值为每个个体创建二进制变量?,r,dplyr,tidyverse,feature-engineering,R,Dplyr,Tidyverse,Feature Engineering,所以我有一个包含4个人的数据集。每个个体在不同的时间段进行测量。在R中: df = data.frame(cbind("id"=c(1,1,1,2,2,3,3,3,3,4,4), "t"=c(1,2,3,1,2,1,2,3,4,1,2), "x1"=c(0,1,0,1,0,0,1,0,1,0,0))) 我想创建变量x2,指示给定个体的变量x1中是否已经有1,即如下所示: "x2" = c(0,1,1,1,1,0,1
df = data.frame(cbind("id"=c(1,1,1,2,2,3,3,3,3,4,4), "t"=c(1,2,3,1,2,1,2,3,4,1,2), "x1"=c(0,1,0,1,0,0,1,0,1,0,0)))
我想创建变量x2,指示给定个体的变量x1中是否已经有1,即如下所示:
"x2" = c(0,1,1,1,1,0,1,1,1,0,0)
。。。理想情况下使用dplyr包。到目前为止,我来到这里:
new_df = df %>% dplyr::group_by(id) %>% dplyr::arrange(t)
但不能从这一点出发。。。理想的结果如图所示
以下是一种使用dplyr的方法:
df %>%
arrange(id, t) %>%
group_by(id) %>%
mutate(x2 = ifelse(row_number() >= min(row_number()[x1 == 1]), 1, 0))
如果行号大于或等于第一行号,其中x1
为1,则这将添加1;否则,它将添加一个0
注意,您将收到警告,因为至少有一个组的值x1
不等于1
另外,另一个备选方案,包括如果您想要NA
,其中noid
的x1
值为1(例如,id
为4):
输出
id t x1 x2
<dbl> <dbl> <dbl> <dbl>
1 1 1 0 0
2 1 2 1 1
3 1 3 0 1
4 2 1 1 1
5 2 2 0 1
6 3 1 0 0
7 3 2 1 1
8 3 3 0 1
9 3 4 1 1
10 4 1 0 0
11 4 2 0 0
id t x1 x2
1 1 1 0 0
2 1 2 1 1
3 1 3 0 1
4 2 1 1 1
5 2 2 0 1
6 3 1 0 0
7 3 2 1 1
8 3 3 0 1
9 3 4 1 1
10 4 1 0 0
11 4 2 0 0
谢谢。同时我提出了这个解决方案:新的df=df%>%dplyr::arrange(id,t)%>%dplyr::groupby(id)%>%dplyr::mutate(“x2”=ifelse(cumsum(x1)>0,1,0))。。。但我担心在出现问题时可能会出现一些特殊情况。你觉得怎么样?@pikachu,应该行得通。我使用另一个选项进行编辑,如果x1
的值不等于1,则添加NA
,以防万一。
id t x1 x2
<dbl> <dbl> <dbl> <dbl>
1 1 1 0 0
2 1 2 1 1
3 1 3 0 1
4 2 1 1 1
5 2 2 0 1
6 3 1 0 0
7 3 2 1 1
8 3 3 0 1
9 3 4 1 1
10 4 1 0 0
11 4 2 0 0