【问题标题】:Can't seem to get subset() working in r [closed]似乎无法让子集()在 r [关闭]
【发布时间】:2013-10-19 19:57:43
【问题描述】:

假设我想查看一个年龄在 55 到 100 岁之间的子集,以查看他们的医疗保健费用。

我用过:

Elders <- subset(midus, Age>= 55 | Age<100)
mean(Elders$Cost, na.rm=TRUE)
#78.8445

我知道这应该给我 55 到 100 人的平均成本。在这种情况下,它是 78.8445

听起来不错。但是,为了检查,我将其与 95-100 岁的人进行比较:

Elders2<-subset(midus,Age>=95 | Age<100)
mean(Elders2$Cost, na.rm=TRUE)
#78.8445

在我看来,这两个子集不太可能具有相同的含义。而且我无法弄清楚我做错了什么让它认为他们这样做。有人有什么想法吗?

感谢您的帮助。自从开始这门课以来,我一直潜伏着堆栈溢出,这对我帮助很大。

【问题讨论】:

  • 这似乎不是subset 的问题,而是更多的问题,因为计算机完全为您提供了您所要求的而不是您想要的。
  • @DWin 在这种情况下我认为它更简单。 x > a | x not 是定义 x、a 和 b 的数字集的子集。不管 a 是 50 还是 95,他都取了整个样本的平均值。这更像是一个数学问题而不是编码。

标签: r subset


【解决方案1】:

我发现使用[ 语法比subset 更容易混淆。您没有提供数据样本来帮助我们,但这样的事情应该可以工作。您的代码中肯定是指AND (&) 而不是OR (|)?

Elders <- midus[midus$Age >= 55 & midus$Age < 100, ]

还可以查看this question 和答案。

【讨论】:

  • 说实话,我不明白为什么,但使用 [] 代替了解决问题。非常感谢 SlowLearner。
  • “你的代码中的意思肯定是 AND (&) 而不是 OR (|)”是这段代码有效而您的代码无效的原因。
  • @ChrisKilbourn 问题不是[] 也不是subset。你使用了错误的逻辑条件。在这两种情况下,您都计算了 整个 表的平均值。你试过mean(midus$Cost, na.rm=TRUE)吗?
【解决方案2】:

这是使用subset的解决方案

> # generating some data
> set.seed(1)
> midus <- data.frame(ID=1:50,
+                     Age=sample(20:100, 50, TRUE), 
+                     Cost=rnorm(50, 100, 3))
> 
> Elders <- subset(midus, Age>= 55 & Age<100) # subseting
> mean(Elders$Cost) 
[1] 100.2068
> 
> Elders2<-subset(midus, Age>=95 & Age<100)
> mean(Elders2$Cost)
[1] 98.78458

如您所见,只需将 | 更改为 &amp; 即可满足您的需求。这是因为您希望 Age 的值介于 55 和 100(不包括 100)之间,因此您需要使用 &amp; 运算符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-02
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2015-09-20
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多