从列表中的每个数据框中获取列名。

问题描述 投票:1回答:3

我的数据如下。

library(data.table)   
df <- fread(
    "A   B  C  D  E  F  iso   year   
     0   A   NA  1  NA  NA  NLD   2009   
     1   Y   NA  2  NA  NA  NLD   2009   
     0   Q   NA  3  NA  NA  AUS   2011   
     1   NA  NA  4  NA  NA  AUS   2011   
     0   0   NA  7  NA  NA  NLD   2008   
     1   1   NA  1  NA  NA  NLD   2008   
     0   1   NA  3  NA  NA  AUS   2012   
     0   NA  1   NA  1  NA  ECU   2009   
     1   NA  0   NA  2  0   ECU   2009   
     0   NA  0   NA  3  0   BRA   2011   
     1   NA  0   NA  4  0   BRA   2011   
     0   NA  1   NA  7  NA  ECU   2008   
     1   NA  0   NA  1  0   ECU   2008   
     0   NA  0   NA  3  2   BRA   2012   
     1   NA  0   NA  4  NA  BRA   2012",
   header = TRUE
)

# Creates a list of dataframes
df_iso <- split(df, df$iso) # Creates a list of dataframes

我现在想提取列表中每个数据集的第8列的列名。

显然,在这种情况下,它们都是 "year"但在我的实际数据中,它们是不同的。

如果我做 colnames(df_iso[[1]])[8] 我得到 "year"所以我试了一下

我试过了

names <- list()
for (i in length(df_iso)) { 
     names <- as.vector(append(names , colnames(df_iso[[i]])[8]))
 }

出乎意料的是,这并不奏效。我想要的是一个列表或一个向量,对于每个data.frame在 df_iso 给我 "年"```,谁能帮帮我?

r list data.table names
3个回答
2
投票

一种可能是。

lapply(df_iso, function(x) names(x)[8])

$AUS
[1] "year"

$BRA
[1] "year"

$ECU
[1] "year"

$NLD
[1] "year"

0
投票

用sapply解决。

sapply(df_iso, function(i){
colnames(i)[8]
})

   AUS    BRA    ECU    NLD 
"year" "year" "year" "year"

0
投票

一个选项是... purrr

library(purrr)
map(df_iso, ~ names(.x)[8])
© www.soinside.com 2019 - 2024. All rights reserved.