我正试图处理无处不在的which
功能.在我开始阅读问题/答案之前,我从未发现它的必要性.而我仍然没有.
据我了解,which
采用布尔向量并返回一个弱的较短向量,其中包含元素的索引,这些索引为true:
> seq(10)
[1] 1 2 3 4 5 6 7 8 9 10
> x <- seq(10)
> tf <- (x == 6 | x == 8)
> tf
[1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE
> w <- which(tf)
> w
[1] 6 8
Run Code Online (Sandbox Code Playgroud)
那么我为什么要使用which
而不是直接使用布尔向量?我可能会看到一些带有巨大载体的记忆问题,因为length(w)
<< length(tf)
,但这并不令人信服.并且帮助文件中有一些选项不会增加我对此功能的可能用途的理解.帮助文件中的示例也没有太大帮助.
为清晰起见编辑 - 我理解which
返回索引.我的问题是关于两件事:1)为什么你需要使用索引而不是仅使用布尔选择器向量?和2)什么有趣的行为which
可能会使它最好只是用一个量化的布尔比较?
ggpairs
在GGally
包中看起来非常有用,但是当NA
数据集中的任何地方存在时它似乎失败:
#require(GGally)
data(tips, package="reshape")
pm <- ggpairs(tips[,1:3]) #works just fine
#introduce NA
tips[1,1] <- NA
ggpairs(tips[,1:3])
> Error in if (lims[1] > lims[2]) { : missing value where TRUE/FALSE needed
Run Code Online (Sandbox Code Playgroud)
我没有看到任何处理NA
值的文档,并且ggpairs(tips[,1:3], na.rm=TRUE)
(不出所料)解决方案不会更改错误消息.
我有一个数据集,其中可能有10%的值NA
随机分散在整个数据集中.因此na.omit(myDataSet)
将删除大部分数据.有没有办法解决?
有没有更好的方法在数据框中进行观察并估算NA值?我已经整理了一个似乎可以完成工作的'for循环',用行的平均值交换NAs,但我想知道是否有更好的方法不使用for循环来解决这个问题 - 也许一个内置的R功能?
# 1. Create data frame with some NA values.
rdata <- rbinom(30,5,prob=0.5)
rdata[rdata == 0] <- NA
mtx <- matrix(rdata, 3, 10)
df <- as.data.frame(mtx)
df2 <- df
# 2. Run for loop to replace NAs with that row's mean.
for(i in 1:3){ # for every row
x <- as.numeric(df[i,]) # subset/extract that row into a numeric vector
y <- is.na(x) # create logical vector of NAs
z <- !is.na(x) # create logical vector of non-NAs
result …
Run Code Online (Sandbox Code Playgroud)