有列表ori_list
,如何组合子数据框cat_a|cat_b
tocat
和item_a|item_b
to item
?(结果与 new_list 相同)
cat_a <- data.frame(name=c('A','B','C'),amount=c(1,2,3))
cat_b <- data.frame(name=c('w','B','C'),amount=c(4,2,3))
item_a <- data.frame(name=c('z','o','C'),amount=c(3,4,1))
item_b <- data.frame(name=c('n','B','C'),amount=c(6,6,3))
files <- ls(pattern = 'cat|item') %>% purrr::set_names()
ori_list <- list(mget(files))
new_list <- list(cat= data.frame(name = c('A','B','C','w','B','C'),
amount = c(1,2,3,4,2,3)),
item = data.frame(name=c('z','o','C','n','B','C'),
amount=c(3,4,1,6,6,3)))
Run Code Online (Sandbox Code Playgroud)
尝试这个。请注意,您使用了mget
错误,它已经生成了一个列表。
ori_list <- mget(files)
list(cat=do.call('rbind', ori_list[grep('^cat', names(ori_list))]),
item=do.call('rbind', ori_list[grep('^item', names(ori_list))]))
# $cat
# name amount
# cat_a.1 A 1
# cat_a.2 B 2
# cat_a.3 C 3
# cat_b.1 w 4
# cat_b.2 B 2
# cat_b.3 C 3
#
# $item
# name amount
# item_a.1 z 3
# item_a.2 o 4
# item_a.3 C 1
# item_b.1 n 6
# item_b.2 B 6
# item_b.3 C 3
Run Code Online (Sandbox Code Playgroud)
你也可以这样做,
lapply(c('cat', 'item'), \(x) do.call('rbind', mget(ls(pattern=x, envir=.GlobalEnv), envir=.GlobalEnv))) |>
setNames(c('cat', 'item'))
# $cat
# name amount
# cat_a.1 A 1
# cat_a.2 B 2
# cat_a.3 C 3
# cat_b.1 w 4
# cat_b.2 B 2
# cat_b.3 C 3
#
# $item
# name amount
# item_a.1 z 3
# item_a.2 o 4
# item_a.3 C 1
# item_b.1 n 6
# item_b.2 B 6
# item_b.3 C 3
Run Code Online (Sandbox Code Playgroud)
这可能会更好。
归档时间: |
|
查看次数: |
59 次 |
最近记录: |