从tibble选取单列仍返回tibble而非vector,如何获取numeric类型值?
问题原因及解决方法
产生原因
tibble(tbl_df)作为tidyverse对基础R数据框的优化实现,和基础data.frame的核心行为差异之一是:使用[进行索引时,默认不会自动简化返回值的结构类型。哪怕仅选择单列数据,返回结果仍然保留tibble结构,不会像基础数据框一样自动降维为向量。这是tibble的刻意设计,目的是规避索引时返回类型意外变化引发的后续代码运行异常。
获取numeric类型返回值的操作方法
以下几种方案都可以实现需求:
- 方案1:在
[索引中添加drop = TRUE参数,强制开启结构简化逻辑
sen <- df[df$my_dummy == 0, "col_name", drop = TRUE]
- 方案2:使用
$或者[[运算符直接提取列,这两类运算符对tibble默认返回向量类型
# 用$符提取 sen <- df$col_name[df$my_dummy == 0] # 用[[提取 sen <- df[df$my_dummy == 0, ][["col_name"]]
- 方案3:使用tidyverse生态下的
dplyr::pull()函数专门提取列
library(dplyr) sen <- df %>% filter(my_dummy == 0) %>% pull(col_name)
内容的提问来源于stack exchange,提问作者robertspierre
相关产品推荐
相关产品推荐

