我搜索过Stack Overflow并且找不到类似的问题...如果您知道其中一个,请转介我。
我有一个数据框“数据”看起来像这样,但有超过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
我试图首先将我的数据重塑为wideform并创建标志:
data.w <- reshape(data=data, direction="wide", idvar="ID", timevar="YEAR")
data.w$Flagabc <- data.w$VarA %in% c("a", "b", "c")
但似乎只包括每年VarA的第一个值,而我的数据每人每年有1000个VarA。我希望我的旗帜为每个独特的人筛选每个可能的VarA并且只标记一次,无论是按年份还是按条件,当满足条件时重复。因为还有很多不同的可能VarA,我不想用dcast重塑它(熔化每个独特的VarA都有自己的列。
我想避免循环,因为我的数据集太大了......但如果这就是它的结果,那么请帮助编写适当的代码。
有没有人可以采取任何想法或不同的方法?
提前谢谢你。
答案 0 :(得分:0)
使用data.table,它是一个单行。
df[VarA %in% c('a','b','c'), .I[1], by=ID]$V1
解释