我有一个像这样的 data.frame:
(t=structure(list(count = c(NA, 2, NA, NA, NA, 8, NA, NA, NA)), .Names = "count", row.names = c(NA,-9L), class = "data.frame"))
count
1 NA
2 2
3 NA
4 NA
5 NA
6 8
7 NA
8 NA
9 NA
R 具有 NA 值很棒,但有时它会咬我。我经常忘记它并尝试做这样的子集
> t[t$count>=1,]
[1] NA 2 NA NA NA 8 NA NA NA
并且输出包括所有 NA 行。 (我不喜欢)
经过一个小时的错误搜索,我将代码更改为这个,这就是我想要的( 想象大型数据框 很多非 NA 结果和只有少数“隐藏良好”的 NA):
> t[t$count>=1&!is.na(t$count),]
[1] 2 8
1.
是否有“as.integer”函数的特性,以便我可以执行以下操作:
t[as.integer.EXCLUDE.NA(t$count)>=1,]
我也想在其他 as.xxxx 函数中使用这样的功能。基本上强制 R 停止像统计学家一样思考并以不同的方式对待 NA(例如,像 NULL(我不确定 NULL 会解决我的问题)(这不起作用:t$count[3]<-NULL 出于某种原因)
2.
或者我怎么跑
transform(t, replace all NAs from count columns with 0)
甚至更好
transform(t, replace all NA from all numeric columns with 0 in t)
3.
欢迎任何关于让 R 忘记 NA 的通用评论?
最佳答案
我也不喜欢在设计“[”如何处理 NA 值时所做的选择。当我想使用逻辑测试提取值时,我采用的方法是将逻辑表达式包装在 which
中。 .这会将结果转换为一组数字并且索引成功,而不会拖拽不需要的 NA:
> t[ which(t$count >= 1), ]
[1] 2 8
# Or if you still want a dataframe result
> t[ which(t$count >= 1), , drop=FALSE]
count
2 2
6 8
我也用
subset
因为它以与 which(logical)
相同的方式处理 NA .一个问题是什么时候 which
与“-”号一起使用来检索补集。如果集合中没有满足逻辑条件的元素,那么 -which(logical)
中也没有元素。 -形式。所以我只是不使用 -which
组合:> t[ -which(t$count < 1), , drop=FALSE]
[1] count
<0 rows> (or 0-length row.names)
> t[ which(t$count < 1), , drop=FALSE]
[1] count
<0 rows> (or 0-length row.names)
关于r - 在 R 中,有没有办法在 data.frame 的整数列中处理 NA,以便在子集化时不包括 NA 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9537499/