我最近遇到了 df[logicaldf,] 命令并且真的很困惑,因為我只看到了 df[x,] 格式,其中 x 是 df 中的一列。這是我在 R 中運行代碼時的示例塊:
> c1 <- c(11, 2, 3, 4, 53)
> c2 <- c(9, 3, 5, 5, 2)
> c3 <- c(1, 10, 3, 2, 2)
> foo <- data.frame(c1, c2, c3)
> foo5 <- foo > 5
> head(foo5)
c1 c2 c3
[1,] TRUE TRUE FALSE
[2,] FALSE FALSE TRUE
[3,] FALSE FALSE FALSE
[4,] FALSE FALSE FALSE
[5,] TRUE FALSE FALSE
> table(rowSums(foo5))
0 1 2
2 2 1
> foo[foo5, ]
c1 c2 c3
1 11 9 1
5 53 2 2
NA NA NA NA
NA.1 NA NA NA
有人可以解釋這里發生了什么嗎?
uj5u.com熱心網友回復:
如果省略逗號,則只需提取以下元素foo5==TRUE:
foo[foo5]
## 11 53 9 10
但是,因為您包含逗號,所以foo5會先轉換為矩陣,然后再轉換為向量。因此括號內foo5變為:
as.vector(as.matrix(foo5))
## TRUE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
現在,4TRUE出現在位置 1、5、6 和 12。因此您的子集命令 ( foo[foo5,]) 試圖從foo. 因此,結果是第 1 行和第 5 行,還有兩行NAs 因為foo沒有第6 行和第 12 行。
請注意,我們可以像這樣復制您的結果:
foo[c(1,5,6,12), ]
## c1 c2 c3
## 1 11 9 1
## 5 53 2 2
## NA NA NA NA
## NA.1 NA NA NA
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/327667.html
下一篇:如何將平均值放入特定日期?
