在下面的代码中,j
是data.frames的命名列表。我想知道是否有办法:
(a)提取data.frame内部变量的数值(即one.short
和one.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))
答案 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