r - 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 日创建
我想选择name
andengine
列。
我尝试了这样的事情但没有成功:
df %>% select(name,$engine)
解决方案
根据@RDRR 在这篇文章中的回答,您可以构建一个自定义函数unnest_dataframes
,在数据帧中迭代地取消嵌套数据帧。之后,您只需选择列type.engine
(type
因为内部数据框是这样调用的),并将其重命名为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
推荐阅读
- php - How to randomize an array json in php
- c# - 查询同一服务器时多线程应用程序中的网络 IO 瓶颈
- php - 多个 .htaccess 文件
- c - gdb 给出与 iofwrite.c 相关的错误
- javascript - 从不同的文件导入函数到类
- c++ - Qt 如何删除 Clang 代码模型?
- python - 为什么 datetime.fromtimestamp(time / 1e3) 会导致 java.util.GregorianCalendar?
- bash - 如何将列中的日期转换为 bash 中的纪元时间戳?
- hibernate - 查找 hibernate 在哪里应用命名策略
- ruby - X509::Attribute#value 返回什么?