缩短多个或条件

时间:2014-06-09 09:16:55

标签: r

希望我在这里不是非常懒惰,但我想知道是否有办法缩短这种情况

dataframe[holiday == 'Yes' & ( type == 1 | type == 2 | type == 3 ), ]

我认为这里的语法是错误的,但我要做的是向所有度假的人展示并选择1,2或3型。

2 个答案:

答案 0 :(得分:3)

让我们说数据帧是df然后就是

df[(df$holiday == 'Yes') & (df$type %in% c(1, 2, 3)), ]

答案 1 :(得分:2)

如果holidaytypedata.frame的列,则您的语法错误:[.data.frame未在范围内评估其内容,这意味着没有意义除非holidaytype是全局环境中的变量。相反,我怀疑你是这个意思:

dataframe[dataframe$holiday == 'Yes' & 
         (dataframe$type == 1 | dataframe$type == 2 | dataframe$type = 3),]

使用%in%更简洁,而不是使用多个OR语句:

dataframe[dataframe$holiday == 'Yes' & dataframe$type %in% 1:3,]

然而,data.table库会评估data.table范围内的列名,让您回到原始语法:

require(data.table)
dt <- as.data.table(data.frame)
dt[holiday == 'Yes' & type %in% 1:3,]