对于相同大小的两个数据帧 df 和 logicaldf,命令 df[logicaldf, ] 在 R 中执行什么?
For two dataframes df and logicaldf of the same size, what does the command df[logicaldf, ] execute in R?
我最近遇到了 df[logicaldf,]
命令,我真的很困惑,因为我只看到 df[x,]
格式,其中 x 是 dataframe
中的一列。这是一个示例块,当我 运行 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
有人能解释一下这里发生了什么吗?
如果省略逗号,则只需提取 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
现在,4 个 TRUE
出现在位置 1、5、6 和 12。因此您的子集命令 (foo[foo5,]
) 试图获取第 1、5、6 和来自 foo
的 12 个。因此,结果是第 1 行和第 5 行,以及两行 NA
s 因为 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
我最近遇到了 df[logicaldf,]
命令,我真的很困惑,因为我只看到 df[x,]
格式,其中 x 是 dataframe
中的一列。这是一个示例块,当我 运行 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
有人能解释一下这里发生了什么吗?
如果省略逗号,则只需提取 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
现在,4 个 TRUE
出现在位置 1、5、6 和 12。因此您的子集命令 (foo[foo5,]
) 试图获取第 1、5、6 和来自 foo
的 12 个。因此,结果是第 1 行和第 5 行,以及两行 NA
s 因为 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