如何将数据子集化为间隔

时间:2013-02-17 18:28:56

标签: r dataframe

我是R的新手,我正在尝试让我的脚本更有效率。我有data.frame25480个观察值和17个变量。

我的一个变量是Subject,每个主题都有它的编号。但是,每个主题的观察数(lines)不相等。我想根据他们的号码将subjects分成groups。我该怎么办?

在我使用这个公式之前:

gaze <- subset(gaze, Subject != "261" & Subject != "270" & Subject != "275") 

但是现在我有太多的主题每次重复主题。是否可以将主题间隔定义为cutsplit。我尝试了这个命令,但它似乎不起作用:

gazeS <- (gaze$Subject[112:216])
cut(gaze, seq(gaze, from = 112, to = 116))

你能帮我修一下这段代码吗?

2 个答案:

答案 0 :(得分:1)

由于因子变量没有排序方法(即使它们显示为数字),您需要首先转换任何订购操作才能正常工作,并且R-FAQ说要使用:

as.numeric(as.character(fac))

所以:

subset(gaze, !as.numeric(as.character(Subject)) in 260:280)

或者:

subset(gaze, !( as.numeric(as.character(Subject)) >= 260 &
            as.numeric(as.character(Subject)) <= 280)  )

或者:

subset( gaze, !Subject %in% as.character(260:280) )

答案 1 :(得分:0)

如果我正确理解了你的需求,你可以使用类似

的东西
gaze$Subject <- as.integer(as.charachter(gaze$Subject))
gaze <- subset(gaze, Subject >= 261 & Subject <= 280) 

将id转换为字符非常重要,否则可能会出现有趣的事情,因为按字母顺序排序因子级别而非数字排序。但是,要避免这种情况,最好的方法是在读取数据时直接设置列类(例如,使用colClasses参数read.table)。