提取data.frame列表的名称以及R中data.frame的值

时间:2019-06-28 16:25:00

标签: r list function loops dataframe

在下面的代码中,j是data.frames的命名列表。我想知道是否有办法:

(a)提取data.frame内部变量的数值(即one.shortone.long)并附加其相关名称(即{{ 1}}或"AAA""BBB")提取的值?

(b),如果变量(即"CCC"one.short)是one.long,则将该data.frame的名称更改为{{ 1}}提取该变量时?

预期输出:

在下面的示例中,我希望我的输出像:

NA

NA

R代码和可复制的数据:

one.short = list(c("AAA", .6), c(NA, NA), c("CCC", .4))

2 个答案:

答案 0 :(得分:2)

我们可以使用[[来执行此操作而无需匿名功能

v1 <- sapply(j, `[[`, 'one.short')
v1
#  AAA BBB CCC 
# 0.6  NA 0.4 

如果要设置NA值的名称

names(v1)[is.na(v1)] <- "NULL"
v1
#   AAA NULL  CCC 
#  0.6   NA  0.4 

请注意,NULL必须放在list中,因为它会掉入vector

c('a', 'b', NULL)
#[1] "a" "b"   


list('a', 'b', NULL)
#[[1]]
#[1] "a"

#[[2]]
#[1] "b"

#[[3]]
#NULL

答案 1 :(得分:1)

这是基本版本,您需要的是中间配置才能使其正常工作。

j_short <- sapply(names(j), function(x) j[[x]]$one.short)

j_short <- setNames(j_short, ifelse(is.na(j_short), NA, names(j_short)))

j_short
AAA BBB CCC 
0.6  NA 0.4