基于其他变量创建一个新变量包含r中的特定值

时间:2016-05-03 04:57:50

标签: r variables

我有几次严重的变量,我想创建两个新的虚拟变量。 变量一:如果其他变量包含特定值,则变量1等于1。 变量二:如果其他变量连续包含特定值,则变量2等于1。

我的数据看起来像

ID score_2011 score_2012 score_2013 score_2014 score_2015
1          12         15         96         96         16
2          12         15         15         15         16
3          12         96         20         15         16
4          12         15         18         15         16
5          12         15         96         15         16

我想获得如下的新变量

IF score_2011~2015 contain 96 then with_96=1
IF score_2011~2015 contain continuous 96 then back_to_back_96=1 

我希望结果看起来像..

  ID    score_2011 score_2012 score_2013  score_2014  score_2015  with_96  back_to_back_96
    1          12         15         96         96         16       1               1
    2          12         15         15         15         16       0               0
    3          12         96         20         15         16       1               0
    4          12         15         18         15         16       0               0
    5          96         15         96         15         16       1               0

提前致谢

2 个答案:

答案 0 :(得分:0)

一个选项是循环遍历行,查找是否有output c af as 值为96('x1'),对每行进行游程编码,检查是否有{{1 '{1}}对于'TRUE'值大于1('x2'),连接两者,转置并将两个新列分配给输出。

any

或另一种选择是使用any

lengths

答案 1 :(得分:0)

如果你愿意的话,你可以对data.table做一些幻想。使用长格式,融化的数据集可能会使某些比较的逻辑变得更简单。

library(data.table)
setDT(dat)
melt(dat, id="ID")[, .(with96=any(value==96), b2b96=any(diff(which(value==96))==1)), by=ID]

#   ID with96 b2b96
#1:  1   TRUE  TRUE
#2:  2  FALSE FALSE
#3:  3   TRUE FALSE
#4:  4  FALSE FALSE
#5:  5   TRUE FALSE