我的数据如下。
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
给我 "年"```,谁能帮帮我?
一种可能是。
lapply(df_iso, function(x) names(x)[8])
$AUS
[1] "year"
$BRA
[1] "year"
$ECU
[1] "year"
$NLD
[1] "year"
用sapply解决。
sapply(df_iso, function(i){
colnames(i)[8]
})
AUS BRA ECU NLD
"year" "year" "year" "year"
一个选项是... purrr
library(purrr)
map(df_iso, ~ names(.x)[8])