尝试总结数据子集时的NA(R)

时间:2015-12-03 00:08:59

标签: r dataframe na missing-data

整个矢量没问题且没有NAs

> summary(data$marks)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00    6.00    6.00    6.02    7.00    7.00

> length(data$marks)
[1] 2528

但是,当尝试使用条件计算子集时,我会收到大量NAs

> summary(data[data$student=="John",]$marks)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  1.000   6.000   6.000   6.169   7.000   7.000     464

> length(data[data$student=="John",]$marks)
[1] 523

3 个答案:

答案 0 :(得分:1)

我认为问题是您缺少student的值。因此,当您按student进行子集时,当您获取子集时,学生的所有NA值最终会为NA生成marks。在which()中包装子集条件以避免此问题。以下是一些有希望澄清正在发生的事情的例子:

# Fake data
set.seed(103)
dat = data.frame(group=rep(LETTERS[1:3], each=3), 
                 value=rnorm(9))
dat$group[1] = NA

dat$value
dat[dat$group=="B", "value"]
dat[which(dat$group=="B"), "value"]

# Simpler example
x = c(10,20,30,40, NA)

x>20
x[x>20]

which(x>20)
x[which(x>20)]

答案 1 :(得分:0)

首先请注意return table[n]会导致NA。当对具有NA值的向量进行子集化时,结果为NA。

NA=="foo"

答案 2 :(得分:0)

一个tidyverse解决方案。我发现这些内容比底数R更易于阅读。

library(tidyverse)

data %<%
  filter(student == "John") %<%
  summary(marks)