当我在没有逗号的数据框中提取列时返回多列

Multiple columns returned when I extract a column in a data frame without comma

我正在做一个关于从数据框中提取数据的 R 练习。数据如下:

team_name <- c("Bulls", "Warriors")
wins <- c(72, 73)
losses <- c(10, 9)
is_champion <- c(TRUE, FALSE)
season <- c("1995-96", "2015-16")
great_nba_teams <- data.frame(team_name, wins, losses, is_champion, season)

提取行没有问题,我理解代码中矢量名称后需要逗号:

filter <- great_nba_teams$is_champion == TRUE
great_nba_teams[filter,]
  team_name wins losses is_champion  season
1     Bulls   72     10        TRUE 1995-96

但是,当我尝试不使用逗号时,我无法提取 is_champion 列。相反,其他列是 returned.

> great_nba_teams[filter]
  team_name losses  season
1     Bulls     10 1995-96
2  Warriors      9 2015-16

great_nba_teams[,filter]相同。我能知道[filter]是什么意思,为什么和[,filter]一样吗?为什么代码没有 return is_champion 的数据?

非常感谢。

数据框是列的列表(通常是向量,并且长度必须相同)。所以当你使用

great_nba_teams[过滤器]

它 returns 过滤器为 TRUE 的列表元素(即列)。这是不正确的,因为过滤器旨在应用于行,而不是列。过滤器实际上是 c(TRUE, FALSE),只有 2 个元素长,所以它被回收到长度 5,即 c(TRUE, FALSE, TRUE, FALSE, TRUE) 这就是为什么你得到奇数列的原因。

great_nba_teams[过滤器]

returns 过滤器为 TRUE 的列的所有行。也不是过滤器的意图。

great_nba_teams[过滤器,]

returns 仅过滤器为 TRUE 的行,但所有列。

PS:不要使用'filter'作为变量名,因为它是一个普通的函数名。这种滤镜我一般用'i'。