1

我是新手R,我正在努力让我的脚本更有效率。我有一个data.frame观察 2548017变量。

我的变量之一是Subject每个科目都有其编号。但是,每个受试者的观察次数 ( lines) 并不相等。我想根据他们的号码将我的subjects分成。groups我该怎么做?

在我使用这个公式之前:

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

但是现在我有太多的主题,每次都重复主题。是否可以定义主题的间隔 tocut或 to split。我试过这个命令,但它似乎不起作用:

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

你能帮我修复这个代码吗?

4

2 回答 2

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) )
于 2013-02-17T20:52:41.527 回答
0

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

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

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

于 2013-02-17T18:33:04.947 回答