根据R

时间:2018-02-26 00:27:53

标签: r variables conditional unique

我搜索过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都有自己的列。

我想避免循环,因为我的数据集太大了......但如果这就是它的结果,那么请帮助编写适当的代码。

有没有人可以采取任何想法或不同的方法?

提前谢谢你。

1 个答案:

答案 0 :(得分:0)

使用data.table,它是一个单行。

df[VarA %in% c('a','b','c'), .I[1], by=ID]$V1

解释

  • {{1}}此部分选择满足给定条件的每组第一行的索引