【问题标题】:How to use subset to get only the first xx observations from the data set in R?如何使用子集仅从 R 中的数据集中获取前 xx 个观察值?
【发布时间】:2012-10-18 09:26:11
【问题描述】:

如果我有一个包含 4137 个观测值的数据集,我想在 hsperc 上对 colga 进行回归,并且只使用前 2070 个观测值,我该怎么做?

我尝试过类似的方法:

# loading data
GPA2 <- read.table("GPA2.raw", header=TRUE, na.strings=".")

# fitting model 
mfit1 <- lm( formula = colgpa ~ hsperc + sat, data=GPA2, subset=(rownum<2071) )

但是使用rownumsubset 失败了。有什么建议吗??

我没有计算行数的变量,我应该有吗?那样的话,我该怎么做呢?

【问题讨论】:

  • 您可以使用 data = GPA2[1:2070, ] 并省略 subset 参数。
  • 我同意上述观点。如果可能,最好避免使用子集。在 Hadley 的在线资料中,他有示例并解释了原因。

标签: r regression dataset


【解决方案1】:

一个简单的、可重现的例子:

dat = data.frame(A = runif(100), B = runif(100))
lm(A~B, dat)

这失败了,你发现了:

> lm(A~B, dat, subset = (rownum < 50))
Error in eval(expr, envir, enclos) : object 'rownum' not found

这是因为您的数据中没有 rownum 列。有两种解决方案:

  1. 添加rownum 列:

    dat[["rownum"]] = 1:nrow(dat)
    
  2. 或者在分析之前进行子集操作:

    dat_subset = dat[1:2070,]
    lm(A~B, dat_subset)
    

正如评论者所说,选择选项 2 可能是最好的。

【讨论】:

  • 哇,谢谢大家的回答!我会尽量使用你的建议!!我不明白使用子集有什么“危险”?
  • 使用head(dat, 2070) 将是另一个很好的解决方案。稍后,如果要使用的行数作为变量,head(dat, x) 将在x &gt; nrow(dat) 时做“正确”的事情:它将返回完整的dat,而dat[1:x,] 将出错。
  • ... 或者更确切地说,它会用NAs 填充dat 的底部(另一个不好的结果)
  • 为什么子集是危险的在这个post by Hadley中有详细的解释,并在这个SO question进行了总结
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-24
  • 1970-01-01
  • 2012-07-17
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多