【问题标题】:How to access the name of a data frames within a list using lapply如何使用 lapply 访问列表中数据框的名称
【发布时间】:2021-07-15 11:27:33
【问题描述】:
library(data.table)

dt <- data.table(V1 = c("Name1", "Name2", "Name3"),  
                 V2 = c(1,2,3),  
                 V3 = c(1,2,3)  
                 )

为了重现性,我已经定义了上面列表元素的名称,但在我的数据中我没有数据表名称的列表。

我使用 split 将数据表变成一个列表:

List <- split(dt, with(dt, interaction(V1)), drop = TRUE)

List
$Name1
      V1 V2 V3
1: Name1  1  1

$Name2
      V1 V2 V3
1: Name2  2  2

$Name3
      V1 V2 V3
1: Name3  3  3

我正在使用 lapply 来操作列表中的元素,作为其中的一部分,我想访问这些数据表的名称。 names() 给了我数据表的变量名。如何引用数据表的名称?

Listnames <- lapply(List, function(x) {
  names(x)
})

Listnames 
$Name1
[1] "V1" "V2" "V3"

$Name2
[1] "V1" "V2" "V3"

$Name3
[1] "V1" "V2" "V3"

【问题讨论】:

标签: r list lapply


【解决方案1】:

你想要这个吗?

lapply(seq_along(List), FUN = function(x) names(List)[x])

[[1]]
[1] "Name1"

[[2]]
[1] "Name2"

[[3]]
[1] "Name3"

【讨论】:

    【解决方案2】:

    purrr 的 imap 是(除其他外)为此发明的:

    
    library(purrr)
    
    foo <- List %>% imap( function(x,y) {
                 cat( "x = ", toString(x), "\n" )
                 cat( "y = ", toString(y), "\n" )
             })
    
    

    输出:

    x =  Name1, 1, 1 
    y =  Name1 
    x =  Name2, 2, 2 
    y =  Name2 
    x =  Name3, 3, 3 
    y =  Name3 
    

    x 是数据,y 是每次迭代的名称

    【讨论】:

      猜你喜欢
      • 2018-03-09
      • 2012-03-17
      • 1970-01-01
      • 2017-08-14
      • 2016-02-07
      • 1970-01-01
      • 2019-02-26
      • 2022-01-14
      • 1970-01-01
      相关资源
      最近更新 更多