R 基于值拆分ID
我有一个大的data.frame,有p列和n行。R 基于值拆分ID,r,dplyr,tidyr,R,Dplyr,Tidyr,我有一个大的data.frame,有p列和n行。 我想更改ID,即如果获得值1,则分割帧。但是,对于每个ID,该值可能会出现多次,因此变得棘手。 我在考虑下订单,所以每次df$Value==1时,该行的df$order==1(接下来,2…直到df$Value==1) 但它并没有真正给我想要的。 有什么建议吗?这里有一个使用数据的选项。表 library(data.table) setDT(df)[, ID := seq(0, 1, by = 0.1)[shift(cumsum(Value==1)
我想更改ID,即如果获得值1,则分割帧。但是,对于每个ID,该值可能会出现多次,因此变得棘手。
我在考虑下订单,所以每次df$Value==1时,该行的df$order==1(接下来,2…直到df$Value==1) 但它并没有真正给我想要的。
有什么建议吗?这里有一个使用
数据的选项。表
library(data.table)
setDT(df)[, ID := seq(0, 1, by = 0.1)[shift(cumsum(Value==1), fill=0)+1] + ID, ID]
或与
dplyr相同
library(dplyr)
df %>%
group_by(ID) %>%
mutate(ID1 = seq(0, 1, by = 0.1)[lag(cumsum(Value==1), default=0)+1] + ID) %>%
ungroup() %>%
mutate(ID = ID1) %>%
select(-ID1)
# A tibble: 15 × 2
# ID Value
# <dbl> <dbl>
#1 1.0 0
#2 1.0 0
#3 1.0 1
#4 2.0 0
#5 2.0 0
#6 2.0 1
#7 2.1 0
#8 2.1 1
#9 2.2 1
#10 2.3 0
#11 3.0 0
#12 3.0 0
#13 3.0 1
#14 3.1 0
#15 3.1 1
库(dplyr)
df%>%
分组依据(ID)%>%
变异(ID1=seq(0,1,by=0.1)[滞后(累积和(值==1),默认值=0)+1]+ID]%>%
解组()%>%
突变(ID=ID1)%>%
选择(-ID1)
#一个tibble:15×2
#ID值
#
#1 1.0 0
#2 1.0 0
#3 1.0 1
#4 2.0 0
#5 2.0 0
#6 2.0 1
#7 2.1 0
#8 2.1 1
#9 2.2 1
#10 2.3 0
#11 3.0 0
#12 3.0 0
#13 3.0 1
#14 3.1 0
#15 3.1 1
i我对data.table不是很有信心。但我理解dplyr解决方案,这是一种非常聪明的方法。谢谢
library(data.table)
setDT(df)[, ID := seq(0, 1, by = 0.1)[shift(cumsum(Value==1), fill=0)+1] + ID, ID]
library(dplyr)
df %>%
group_by(ID) %>%
mutate(ID1 = seq(0, 1, by = 0.1)[lag(cumsum(Value==1), default=0)+1] + ID) %>%
ungroup() %>%
mutate(ID = ID1) %>%
select(-ID1)
# A tibble: 15 × 2
# ID Value
# <dbl> <dbl>
#1 1.0 0
#2 1.0 0
#3 1.0 1
#4 2.0 0
#5 2.0 0
#6 2.0 1
#7 2.1 0
#8 2.1 1
#9 2.2 1
#10 2.3 0
#11 3.0 0
#12 3.0 0
#13 3.0 1
#14 3.1 0
#15 3.1 1