summary
(或其他命令)中是否有一个参数强制 R 计算每个单元格中“无数据”时的值?
在我的调查问卷中,科目没有提供所有信息;对于那些我输入-nodata-
的单元格。对于答案不适用的单元格(基于q中的上一个问题),我输入了-1
。 summary
看起来像这样:
> summary(qs$ESC)
-1 -nodata- 0.5 1 12 15 3
49 3 1 1 1 1 1
我想要的是计算摘要。有没有办法告诉 R 忽视-nodata-
和-1
?
答案 0 :(得分:3)
我真的不明白你想要计算什么样的摘要。
如果您使用NA代替“-nodata-”和“-1”代码,则在使用summary
函数时会自动考虑这些代码:
例如:
R> v <- c(NA, NA, 0.5, 1, 12, 15, 3)
R> summary(v)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0.5 1.0 3.0 6.3 12.0 15.0 2.0
R> table(v)
v
0.5 1 3 12 15
1 1 1 1 1
您可以看到此处v
被视为数字,因为其中没有字符串值。当您引入“-nodata-”值时,它将被视为字符或因子变量。
您还可以使用exclude
函数的table
参数自动忽略某些值:
R> v <- c(-1, "-nodata-", 0.5, 1, 12, 15, 3)
R> table(v)
v
0.5 1 -1 12 15 3 -nodata-
1 1 1 1 1 1 1
R> table(v, exclude=c(-1, "-nodata-"))
v
0.5 1 12 15 3
1 1 1 1 1
答案 1 :(得分:1)
ESC
列很可能是一个因子,当从列的数据类型进行猜测并且需要字符时,read.table的data.frame的默认值。您应该将参数stringsAsFactors=FALSE
添加到对read.table的原始调用中 - 这将使列成为文本,然后将“-nodata-”值转换为NA,然后转换为numeric。
read.table还有一个na.strings参数,可以设置为na.strings = "-nodata-"
以自动用NA替换它们。
最后猜测从现有的data.frame,替换nodata值并转换为数字:
qs$ESC[qs$ESC == "-nodata-"] <- NA
summary(as.numeric(levels(qs$ESC))[qs$ESC]
因子推荐使用因子水平的索引,但您应该回到读取或以其他方式生成数据的位置