整个矢量没问题且没有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
答案 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)