r - 修改/添加列到嵌套的tibble

标签 r nested tibble

我有一个带有变量/列的小标题,其中包括不同形状的小标题列表。我想为其中一个变量中的每个(子)标题添加一个变量/列。

例如此类数据

library("tibble")
aaa <- tibble(qq = c(1,2,3),
              ww = list(tibble(a = c(1,2), s = c("as", "df")),
                        tibble(a = 3, s ="q"),
                        tibble(a = 4, s = "e")),
              ee = list(tibble(a = c(1,2), s = c("as", "df")),
                        tibble(a = c(3,6), s = c("qz", "wz")),
                        tibble(a = 4, s = "ez")))

看起来像:

 > aaa
# A tibble: 3 x 3
     qq ww               ee              
  <dbl> <list>           <list>          
1  1.00 <tibble [2 × 2]> <tibble [2 × 2]>
2  2.00 <tibble [1 × 2]> <tibble [2 × 2]>
3  3.00 <tibble [1 × 2]> <tibble [1 × 2]>

> aaa$ee
[[1]]
# A tibble: 2 x 2
      a s    
  <dbl> <chr>
1  1.00 as   
2  2.00 df   

[[2]]
# A tibble: 2 x 2
      a s    
  <dbl> <chr>
1  3.00 qz   
2  6.00 wz   

[[3]]
# A tibble: 1 x 2
      a s    
  <dbl> <chr>
1  4.00 ez   

假设我想在 aaa$ee 中的每个 tibble 中创建一个名为 lll 的新变量,它是每个的第一个字母该表中变量 s 中的字符串。

我可以通过 lapply 获得这些,例如:

lll <- lapply(X = aaa$ee,
       FUN = function(z){substr(z$s, 1,1)})

导致

> lll
[[1]]
[1] "a" "d"

[[2]]
[1] "q" "w"

[[3]]
[1] "e"

但是如何将这个列表中的每个向量绑定(bind)为 aaa$ee 中每个 tibble 的列?

产生应该看起来像这样的结果

> aaa$ee
 [[1]]
 # A tibble: 2 x 2
      a s    
  <dbl> <chr> <chr>
1  1.00 as    a
2  2.00 df    d

[[2]]
# A tibble: 2 x 2
      a s    
  <dbl> <chr> <chr>
1  3.00 qz    q
2  6.00 wz    w

[[3]]
# A tibble: 1 x 2
      a s    
  <dbl> <chr> <chr>
1  4.00 ez    e

最佳答案

我们可以使用 mapmutate 遍历 'ee' 列来创建 'new' 列

library(purrr)
out <- aaa %>% 
         mutate(ee = map(ee, ~ .x %>% 
                              mutate(new = substr(s, 1, 1))))


out$ee
#[[1]]
## A tibble: 2 x 3
#      a s     new  
#  <dbl> <chr> <chr>
#1     1 as    a    
#2     2 df    d    

#[[2]]
# A tibble: 2 x 3
#      a s     new  
#  <dbl> <chr> <chr>
#1     3 qz    q    
#2     6 wz    w 

#[[3]]
# A tibble: 1 x 3
#      a s     new  
#  <dbl> <chr> <chr>
#1     4 ez    e    

如果我们使用 lapply 方法(使用 base R),然后使用 transform 创建一个新列并将其分配给 '嗯'

aaa$ee <- lapply(aaa$ee, transform, new = substr(s, 1, 1))

关于r - 修改/添加列到嵌套的tibble,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50126316/

相关文章:

r - SparkR 中将字符串转换为日期时间?

r - 类似于 h2o 包中排列精度重要性的东西

r - match.fun 为函数内部定义的函数提供错误

c++ - 如何访问嵌套类

r - 因子到因子的条件重新编码

r - 在 R 中学习隐马尔可夫模型

ios - 核心数据 : Do child contexts ever get permanent objectIDs for newly inserted objects?

c++使用枚举创建类会产生错误

r - Fisher 在 R 中根据数据帧进行精确测试

r - dplyr::mutate() -- 在 tibble 嵌套列表中,如何忽略 NULL 嵌套列表?