我是R
的新手,我正在尝试让我的脚本更有效率。我有data.frame
个25480
个观察值和17
个变量。
我的一个变量是Subject
,每个主题都有它的编号。但是,每个主题的观察数(lines
)不相等。我想根据他们的号码将subjects
分成groups
。我该怎么办?
在我使用这个公式之前:
gaze <- subset(gaze, Subject != "261" & Subject != "270" & Subject != "275")
但是现在我有太多的主题每次重复主题。是否可以将主题间隔定义为cut
或split
。我尝试了这个命令,但它似乎不起作用:
gazeS <- (gaze$Subject[112:216])
cut(gaze, seq(gaze, from = 112, to = 116))
你能帮我修一下这段代码吗?
答案 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
)。