我在R中有一个列表列表。我创建了以下示例列表来说明我的问题:
example_list <- list(
list(id1 = 123, id2 = 321, school = 'notting'),
list(id3 = 12, house = 'Y'),
list(id4 = 18)
)
我想要做的基本上是将id元素的名称替换为一个一致的名称,即id。所以我的输出是:
solution_list <- list(
list(id = 123, id = 321, school = 'notting'),
list(id = 12, house = 'Y'),
list(id = 18)
)
请注意,子列表可能包含多个id_元素。
我已经写了这个函数来处理每个子列表:
replace_names<- function(x, r) {
indices <- grepl(r, names(x))
if(length(indices) > 0) {names(x)[indices] <- r}
}
我的想法是使用:
lapply(example, replace_names, r = "id")
虽然我的功能由于某种原因不起作用,而且这种方法看起来有点hacky,有什么建议吗?
答案 0 :(得分:1)
我们会替换names
个list
元素,这些元素具有&#39; id&#39;接着是数字(使用grep
)到&#39; id&#39;,然后返回list
元素。
sol_list <- lapply(example_list, function(x) {
names(x)[grep("id", names(x))] <- "id"
x})
identical(solution_list, sol_list)
#[1] TRUE
或者其他选项是使用sub
从names
中删除号码(因为只有&#39; id&#39;数字作为后缀
lapply(example_list, function(x) setNames(x, sub("\\d+", "", names(x))))