在列表的特定位置插入特定元素
Insert specific elements in specific locations of a list
我有大小不等的列表,我想将一个列表中的特定项目附加到另一个列表中的特定位置
第一个列表
dat <- structure(list(supergrp = c("D", "A", "P", "B"),
clusters = c("1", "2", "3", "1"),
items = structure(list(`1.2` = c("a", "c", "d"),
`2.1` = "b", `3` = "e", `4` = c("e", "b")),
.Names = c("1.2", "2.1", "3", "4"))),
.Names = c("supergrp", "clusters", "items"),
row.names = c(NA, 4L), class = "data.frame")
第二个列表
val_to_append <- structure(list(supergrp = c("D", "A"),
clusters = c(1, 2),
items = structure(list(`1.2` = c("c", "f"),
`2.1` = c("c", "d", "e")),
.Names = c("1.2", "2.1"))),
.Names = c("supergrp", "clusters", "items"),
row.names = c(NA, -2L), class = "data.frame")
我想将 val_to_append$item[[1]]
附加到 dat$item[[3]]
同样,我想将项目 val_to_append$item[[2]]
附加到 dat$item[[1]]
要求的输出是
supergrp clusters items
1 D 1 a, c, d, e
2 A 2 b
3 P 3 e, c, f
4 B 1 e, b
我可以循环执行此操作
dat_indx <- c(3,1)
val_indx <- c(1,2)
fin_result <- dat
for(i in seq_along(dat_indx)) {
out_put_indx <- dat_indx[[i]]
fin_result$items[[dat_indx[[i]]]] <- unique(c(fin_result$items[[dat_indx[[i]]]],
val_to_append$items[[val_indx[[i]]]]))
}
我尝试了普通向量索引,例如
append(fin_result$items[[dat_indx]], val_to_append$items[[val_indx]])
没有成功。有没有一种有效的方法可以做到这一点,因为我的列表,也就是数据框非常大,有数十万个样本。
我正在考虑 sapply
但没有具体想法
我们可以使用mapply
来实现这一点。我们使用事先已知的索引值将 val_to_append$items
的值附加到 dat$items
。
dat_indx <- c(3,1)
val_indx <- c(1,2)
dat$items[dat_indx] <- mapply(function(x, y)
unique(c(dat$items[[x]], val_to_append$items[[y]])), dat_indx, val_indx)
dat
# supergrp clusters items
#1 D 1 a, c, d, e
#2 A 2 b
#3 P 3 e, c, f
#4 B 1 e, b
尽管这是解决问题的另一种方法,但我怀疑它的效率如何。
我有大小不等的列表,我想将一个列表中的特定项目附加到另一个列表中的特定位置
第一个列表
dat <- structure(list(supergrp = c("D", "A", "P", "B"),
clusters = c("1", "2", "3", "1"),
items = structure(list(`1.2` = c("a", "c", "d"),
`2.1` = "b", `3` = "e", `4` = c("e", "b")),
.Names = c("1.2", "2.1", "3", "4"))),
.Names = c("supergrp", "clusters", "items"),
row.names = c(NA, 4L), class = "data.frame")
第二个列表
val_to_append <- structure(list(supergrp = c("D", "A"),
clusters = c(1, 2),
items = structure(list(`1.2` = c("c", "f"),
`2.1` = c("c", "d", "e")),
.Names = c("1.2", "2.1"))),
.Names = c("supergrp", "clusters", "items"),
row.names = c(NA, -2L), class = "data.frame")
我想将 val_to_append$item[[1]]
附加到 dat$item[[3]]
同样,我想将项目 val_to_append$item[[2]]
附加到 dat$item[[1]]
要求的输出是
supergrp clusters items
1 D 1 a, c, d, e
2 A 2 b
3 P 3 e, c, f
4 B 1 e, b
我可以循环执行此操作
dat_indx <- c(3,1)
val_indx <- c(1,2)
fin_result <- dat
for(i in seq_along(dat_indx)) {
out_put_indx <- dat_indx[[i]]
fin_result$items[[dat_indx[[i]]]] <- unique(c(fin_result$items[[dat_indx[[i]]]],
val_to_append$items[[val_indx[[i]]]]))
}
我尝试了普通向量索引,例如
append(fin_result$items[[dat_indx]], val_to_append$items[[val_indx]])
没有成功。有没有一种有效的方法可以做到这一点,因为我的列表,也就是数据框非常大,有数十万个样本。
我正在考虑 sapply
但没有具体想法
我们可以使用mapply
来实现这一点。我们使用事先已知的索引值将 val_to_append$items
的值附加到 dat$items
。
dat_indx <- c(3,1)
val_indx <- c(1,2)
dat$items[dat_indx] <- mapply(function(x, y)
unique(c(dat$items[[x]], val_to_append$items[[y]])), dat_indx, val_indx)
dat
# supergrp clusters items
#1 D 1 a, c, d, e
#2 A 2 b
#3 P 3 e, c, f
#4 B 1 e, b
尽管这是解决问题的另一种方法,但我怀疑它的效率如何。