在数据框中使用包含嵌套列表名称的值创建新的标识符列

时间:2018-12-07 17:55:23

标签: r

我想在每个数据框中使用包含嵌套列表名称的值创建一个新的标识符列。

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

2 个答案:

答案 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