R中重复子集的简洁代码

时间:2018-04-12 12:05:27

标签: r subset

我是R初学者,我很难找到更好的方法来重新编码数据帧的元素。我的数据有一个列,其中包含了采样(评估)的年份,但是我想根据两年一次的子集运行一些测试(不是像格式化的年度一样)。因此,我希望在评估年度确定两个并发年份。我想我可以运行类似的东西:

ddd$Assessment[ddd$Assessment==1997 & ddd$Assessment==1998]<-1998 

但是我觉得必须有一个更好的方法(我知道我不需要上面代码的后半部分,但为了清晰起见而留下它),特别是因为我有大量的数据跨越了23年。 任何帮助将非常感谢

2 个答案:

答案 0 :(得分:1)

如果您的评估年度始终是每隔一年,则可以使用ceiling函数的属性创建两年期列。

ddd <- data.frame(Assessment = 1997:2006)
ddd$biennial <- ceiling(ddd$Assessment/2)*2
ddd
#   Assessment biennial
#1        1997    1998
#2        1998    1998
#3        1999    2000
#4        2000    2000
#5        2001    2002
#6        2002    2002
#7        2003    2004
#8        2004    2004
#9        2005    2006
#10       2006    2006

答案 1 :(得分:0)

为了对两年的代码进行编码,并确保数据集的未来用户不会误认为此列实际代表的内容,我宁愿使用cut

ddd <- data.frame(Assessment = 1997:2006)
ddd$biennial <- cut(ddd$Assessment, breaks = seq(1996, 2008, by=2), right = F)
ddd
#   Assessment    biennial
#1        1997 [1996,1998)
#2        1998 [1998,2000)
#3        1999 [1998,2000)
#4        2000 [2000,2002)
#5        2001 [2000,2002)
#6        2002 [2002,2004)
#7        2003 [2002,2004)
#8        2004 [2004,2006)
#9        2005 [2004,2006)
#10       2006 [2006,2008)