【问题标题】:Multiple columns returned when I extract a column in a data frame without comma [duplicate]当我在没有逗号的数据框中提取列时返回多列[重复]
【发布时间】:2021-02-27 05:31:14
【问题描述】:

我正在做一个关于从数据框中提取数据的 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 列。而是返回其他列。

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

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

非常感谢。

【问题讨论】:

    标签: r data-extraction


    【解决方案1】:

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

    great_nba_teams[过滤器]

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

    great_nba_teams[,过滤器]

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

    great_nba_teams[过滤器,]

    仅返回 filter 为 TRUE 的行,但返回所有列。

    PS:不要使用 'filter' 作为变量名,因为它是常用的函数名。我通常使用 'i' 作为这种过滤器。

    【讨论】:

      猜你喜欢
      • 2021-10-16
      • 2019-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多