首页 > 解决方案 > R:选择数据框列的一列

问题描述

我尝试选择位于 data.frame 列中的列。听起来很容易,但是,我不知所措..

library(tidyverse)

#test data
df <- tibble(name=c("a","b","c"),
            type=data.frame(motor=c(1,2,3),
            engine=c(1,2,3)),
            more=list(c(list(1,2,3),
                   list(2,3,4),
                   list(1,1,1))))

df
#> # A tibble: 3 x 3
#>   name  type$motor $engine more      
#>   <chr>      <dbl>   <dbl> <list>    
#> 1 a              1       1 <list [9]>
#> 2 b              2       2 <list [9]>
#> 3 c              3       3 <list [9]>

reprex 包(v0.3.0)于 2020 年 6 月 23 日创建

我想选择nameandengine列。

我尝试了这样的事情但没有成功:

df %>% select(name,$engine)

标签: rdataframedplyrnestedtidyverse

解决方案


根据@RDRR 在这篇文章中的回答,您可以构建一个自定义函数unnest_dataframes,在数据帧中迭代地取消嵌套数据帧。之后,您只需选择列type.enginetype因为内部数据框是这样调用的),并将其重命名为engine.

unnest_dataframes <- function(x) {
  y <- do.call(data.frame, x)
  if("data.frame" %in% sapply(y, class))
    unnest_dataframes(y)
  y
}

unnest_dataframes(df) %>% select(name, engine = type.engine)

输出

#   name engine
# 1    a      1
# 2    b      2
# 3    c      3

推荐阅读