我想在每个数据框中使用包含嵌套列表名称的值创建一个新的标识符列。
parent <- list(
a = list(
foo = data.frame(first = c(1, 2, 3), second = c(4, 5, 6)),
bar = data.frame(first = c(1, 2, 3), second = c(4, 5, 6)),
puppy = data.frame(first = c(1, 2, 3), second = c(4, 5, 6))),
b = list(
foo = data.frame(first = c(1, 2, 3), second = c(4, 5, 6)),
bar = data.frame(first = c(1, 2, 3), second = c(4, 5, 6)),
puppy = data.frame(first = c(1, 2, 3), second = c(4, 5, 6))))
因此,列表a中第一个数据帧的结果如下所示:
> foo
first second identifier
1 1 4 a
2 2 5 a
3 3 6 a
列表b中的第一个数据帧如下所示:
>foo
first second identifier
1 1 4 b
2 2 5 b
3 3 6 b
答案 0 :(得分:2)
好像您可能想要这样的东西
Map(function(name, list) {
lapply(list, function(x) cbind(x, identifier=name))
}, names(parent), parent)
在这里,我们使用Map()
并将列表和列表名称以及cbind
的那些标识符放入data.frames。
答案 1 :(得分:2)
我们可以使用navBar.topItem?.leftBarButtonItem = backButton
。通过tidyverse
循环list
(将{{1}的imap
和{{1}的values
都赋予{{1 }}和keys
,然后与name
一起循环遍历data.frame内部的list
和.x
以创建列“ identifier as .y
,也就是map2
中的list
mutate
如果要基于data.frame名称创建列,请仅使用.y
遍历names
元素,然后使用list
遍历内部{{1 }},以获得library(tidyverse)
imap(parent, ~ map2(.x, .y, ~ .x %>%
mutate(identifier = .y)))
#$a
#$a$foo
# first second identifier
#1 1 4 a
#2 2 5 a
#3 3 6 a
#$a$bar
# first second identifier
#1 1 4 a
#2 2 5 a
#3 3 6 a
#$a$puppy
# first second identifier
#1 1 4 a
#2 2 5 a
#3 3 6 a
#$b
#$b$foo
# first second identifier
#1 1 4 b
#2 2 5 b
#3 3 6 b
#$b$bar
# first second identifier
#1 1 4 b
#2 2 5 b
#3 3 6 b
#$b$puppy
# first second identifier
#1 1 4 b
#2 2 5 b
#3 3 6 b
(内部list
的{{1}})并创建新列'identifier
map