gpt4 book ai didi

r - 如何在不丢失名称的情况下向列表中的列表添加列?

转载 作者:行者123 更新时间:2023-12-04 22:54:52 25 4
gpt4 key购买 nike

我做了几次尝试将特定列添加到数据框中。列表中的列表,但所有 *apply()尝试未能保留数据框的名称。

例如列表 l ,

l <- list(alpha=data.frame(1:3), bravo=data.frame(4:6), charly=data.frame(7:9))

> l
$`alpha`
X1.3
1 1
2 2
3 3

$bravo
X4.6
1 4
2 5
3 6

$charly
X7.9
1 7
2 8
3 9

我想要列表名称的首字母作为第二个 id柱子。我尝试了这些尝试,它们基本上给了我我想要的东西:
lapply(seq_along(l), function(x) cbind(l[[x]], id=substr(names(l)[x], 1, 1)))
# or
lapply(seq_along(l), function(x) data.frame(l[[x]], id=substr(names(l)[x], 1, 1)))
# [[1]]
# X1.3 id
# 1 1 a
# 2 2 a
# 3 3 a
#
# [[2]]
# X4.6 id
# 1 4 b
# 2 5 b
# 3 6 b
#
# [[3]]
# X7.9 id
# 1 7 c
# 2 8 c
# 3 9 c

但是内部列表已经失去了它们的名字。选项 USE.NAMES=TRUE来自 lapply()文档不起作用。

我也试过这两种尝试,但他们失败得更糟。
lapply(seq_along(l), function(x) mapply(cbind, l[[x]], id=substr(names(l)[x], 1, 1), 
SIMPLIFY=FALSE))
rapply(l, function(x) cbind(x, id=substr(names(l)[x], 1, 1)), how="list")

我知道我可以这样做:
l1 <- lapply(seq_along(l), function(x) cbind(l[[x]], id=substr(names(l)[x], 1, 1)))
names(l1) <- names(l)

或做一个 for环形:
for(i in seq_along(l)) {
l[[i]] <- data.frame(l[[i]], id=substr(names(l)[i], 1, 1))
}

但我想知道是否是 *apply()可以改进解决方案以带来预期的输出,即:
$`alpha`
X1.3 id
1 1 a
2 2 a
3 3 a

$bravo
X4.6 id
1 4 b
2 5 b
3 6 b

$charly
X7.9 id
1 7 c
2 8 c
3 9 c

最佳答案

试试 Map

Map(`[<-`, l, "id", value = substr(names(l), 1, 1))
#$alpha
# X1.3 id
#1 1 a
#2 2 a
#3 3 a

#$bravo
# X4.6 id
#1 4 b
#2 5 b
#3 6 b

#$charly
# X7.9 id
#1 7 c
#2 8 c
#3 9 c

第一个参数是一个函数。 Map然后将函数“应用于每个...参数的第一个元素,第二个元素,第三个元素,依此类推。”,参见 ?mapply .

关于r - 如何在不丢失名称的情况下向列表中的列表添加列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53711248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com