我需要从列表中挖掘出类似的数据帧并将它们放入数据帧中.我创建了一个玩具示例:
nn <- list()
h <- data.frame(a = c(5,6), j = c(8,1), g = c("d","o"))
rnz <- c("test1","test2")
o <- data.frame(a = c(1,2), j = c(6,4), g = c("r","u"))
rownames(h) <- rnz
rownames(o) <- rnz
i <- 1:4
nn$set1 <- list(num = i, df = h)
nn$set2 <- list(num = i / 2, df = o)
Run Code Online (Sandbox Code Playgroud)
现在我想将列表提取为以下整齐的格式
var a j
set1 test1 5 8
set1 test2 6 1
set2 test1 1 6
set2 test2 2 4
Run Code Online (Sandbox Code Playgroud)
但是 - 当我这样做的时候
df <- lapply(nn, function(x) x$df[ , c(1,2)])
df2 <- lapply(df, function(x) tibble::rownames_to_column(x, "var"))
df3 <- do.call(rbind, lapply(df2, function(c) as.data.frame(c, row.names = NULL)))
Run Code Online (Sandbox Code Playgroud)
我明白了:
var a j
set1.1 test1 5 8
set1.2 test2 6 1
set2.1 test1 1 6
set2.2 test2 2 4
Run Code Online (Sandbox Code Playgroud)
如何删除删除行列中的.1,.2等?这样做有一个更简洁的方法吗?
dplyr::bind_rows有一个.id参数来强制元素名称到列.purrr::map_df包装它,包括.id参数,所以你可以直接转换nn:
library(purrr)
# extract data.frame elements
nn %>% map('df') %>%
# add rownames to each data.frame; coerce result to data.frame with element names as column
map_df(tibble::rownames_to_column, 'var', .id = 'name')
## name var a j g
## 1 set1 test1 5 8 d
## 2 set1 test2 6 1 o
## 3 set2 test1 1 6 r
## 4 set2 test2 2 4 u
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2334 次 |
| 最近记录: |