根据 R 中每个唯一 ID 具有多个值的列创建标志
Create flag based on column with multiple values per unique ID in R
我搜索了 Stack Overflow,但找不到类似的问题...如果您知道,请向我推荐。
我有一个数据框 "data",看起来像这样,但有超过 8000 万行和 VarA 的数百万种可能性:
ID YEAR VarA
1 2014 a
1 2015 a
1 2014 b
1 2015 c
2 2014 a
2 2015 b
2 2016 c
我想创建一个标志,其中对于每个唯一 ID,我们计算一个条件 VarA 一次。例如,如果我想标记 VarA 可能是 "a"、"b" 或 "c" 的所有实例,我希望每个唯一个体对它们计数一次:
ID YEAR VarA Flagabc
1 2014 a 1
1 2015 a 0
1 2014 b 0
1 2015 c 0
2 2014 a 1
2 2015 b 0
2 2016 c 0
我尝试先将我的数据重塑为宽格式并创建标志:
data.w <- reshape(data=data, direction="wide", idvar="ID", timevar="YEAR")
data.w$Flagabc <- data.w$VarA %in% c("a", "b", "c")
但是好像只包含了每年的VarA的第一个值,而我的数据是每人每年有1000s的VarA。我希望我的标志为每个独特的人筛选每个可能的 VarA,并且只标记一次,无论按年份或按条件重复,当条件满足时。因为也有很多不同的可能的 VarA,所以我不想使用 dcast 重塑它(在每个独特的 VarA 都有自己的列的地方熔化。
我想避免循环,因为我的数据集太大了...但如果这就是问题所在,我希望能帮助您编写适当的代码。
有人有什么想法或我可以采用的不同方法吗?
提前谢谢你。
使用data.table,它是一条线。
> setDT(df)
> df[,Flagabc := 0]
> df[df[VarA %in% c('a','b','c'), .I[1], by=ID]$V1, Flagabc:=1]
ID YEAR VarA Flagabc
1: 1 2014 a 1
2: 1 2015 a 0
3: 1 2014 b 0
4: 1 2015 c 0
5: 2 2014 a 1
6: 2 2015 b 0
7: 2 2016 c 0
说明
df[VarA %in% c('a','b','c'), .I[1], by=ID]$V1
这部分在满足给定条件的情况下选择每组第一行的索引
我搜索了 Stack Overflow,但找不到类似的问题...如果您知道,请向我推荐。
我有一个数据框 "data",看起来像这样,但有超过 8000 万行和 VarA 的数百万种可能性:
ID YEAR VarA
1 2014 a
1 2015 a
1 2014 b
1 2015 c
2 2014 a
2 2015 b
2 2016 c
我想创建一个标志,其中对于每个唯一 ID,我们计算一个条件 VarA 一次。例如,如果我想标记 VarA 可能是 "a"、"b" 或 "c" 的所有实例,我希望每个唯一个体对它们计数一次:
ID YEAR VarA Flagabc
1 2014 a 1
1 2015 a 0
1 2014 b 0
1 2015 c 0
2 2014 a 1
2 2015 b 0
2 2016 c 0
我尝试先将我的数据重塑为宽格式并创建标志:
data.w <- reshape(data=data, direction="wide", idvar="ID", timevar="YEAR")
data.w$Flagabc <- data.w$VarA %in% c("a", "b", "c")
但是好像只包含了每年的VarA的第一个值,而我的数据是每人每年有1000s的VarA。我希望我的标志为每个独特的人筛选每个可能的 VarA,并且只标记一次,无论按年份或按条件重复,当条件满足时。因为也有很多不同的可能的 VarA,所以我不想使用 dcast 重塑它(在每个独特的 VarA 都有自己的列的地方熔化。
我想避免循环,因为我的数据集太大了...但如果这就是问题所在,我希望能帮助您编写适当的代码。
有人有什么想法或我可以采用的不同方法吗?
提前谢谢你。
使用data.table,它是一条线。
> setDT(df)
> df[,Flagabc := 0]
> df[df[VarA %in% c('a','b','c'), .I[1], by=ID]$V1, Flagabc:=1]
ID YEAR VarA Flagabc
1: 1 2014 a 1
2: 1 2015 a 0
3: 1 2014 b 0
4: 1 2015 c 0
5: 2 2014 a 1
6: 2 2015 b 0
7: 2 2016 c 0
说明
df[VarA %in% c('a','b','c'), .I[1], by=ID]$V1
这部分在满足给定条件的情况下选择每组第一行的索引