R:将列表组件的值连接到另一个定义哪些组件在一起的列表
R: Concatenate values of list components by another list defining which ones go together
我有两个列表。 lst1
包含表示变量名称的字符向量:
lst1 <- list(c("var1", "var2"),
"item1",
c("var12", "var15", "var17"),
c("item3", "item5", "item7"),
"var22",
c("var27", "var29", "var33", "var34"))
如您所见,lst1
中的某些组件包含一个或多个变量名称。 lst2
包含 lst1
中每个变量名称的值,但每个都在单独的组件中:
lst2 <- list(var1 = as.character(c(1, 2, 3, 5, 6)),
var2 = as.character(c(1, 3, 4, 5, 6, 7)),
item1 = letters[1:5],
var12 = as.character(1:3),
var15 = as.character(1:5),
var17 = as.character(1:6),
item3 = letters[3:8],
item5 = letters[4:9],
item7 = letters[5:10],
var22 = as.character(2:7),
var27 = as.character(4:10),
var29 = as.character(3:8),
var33 = as.character(1:4),
var34 = as.character(4:9))
这两个列表要大得多,是我处理过的以前代码的产物。我想要实现的是获得一个列表 lst1
,其中每个组件都包含来自 lst2
的连接元素,而不是变量名称,用于属于 lst1
中该组件的所有名称,像
lst3 <- list(c("1", "2", "3", "5", "6", "1", "3", "4", "5", "6", "7"),
c("a", "b", "c", "d", "e"),
c("1", "2", "3", "1", "2", "3", "4", "5", "1", "2", "3", "4", "5", "6"),
c("c", "d", "e", "f", "g", "h", "d", "e", "f", "g", "h", "i", "e", "f", "g", "h", "i", "j"),
c("2", "3", "4", "5", "6", "7"),
c("4", "5", "6", "7", "8", "9", "10", "3", "4", "5", "6", "7", "8", "1", "2", "3", "4", "4", "5", "6", "7", "8", "9"))
并且可能只获取每个组件中排序后的唯一值。
这怎么可能?
编辑: 我在给出 lst3
示例的部分更新了我的 post,因为我发现了 lst3
中的错误.
尝试
lapply(lst1, function(x) sort(unique(unlist(lst2[x], use.names=FALSE))))
如果我们不需要 sort
并获得 unique
值
lapply(lst1, function(x) unlist(lst2[x], use.names=FALSE))
#[[1]]
#[1] "1" "2" "3" "5" "6" "1" "3" "4" "5" "6" "7"
#[[2]]
#[1] "a" "b" "c" "d" "e"
#[[3]]
#[1] "1" "2" "3" "1" "2" "3" "4" "5" "1" "2" "3" "4" "5" "6"
#[[4]]
#[1] "c" "d" "e" "f" "g" "h" "d" "e" "f" "g" "h" "i" "e" "f" "g" "h" "i" "j"
#[[5]]
#[1] "2" "3" "4" "5" "6" "7"
#[[6]]
#[1] "4" "5" "6" "7" "8" "9" "10" "3" "4" "5" "6" "7" "8" "1" "2"
#[16] "3" "4" "4" "5" "6" "7" "8" "9"
我有两个列表。 lst1
包含表示变量名称的字符向量:
lst1 <- list(c("var1", "var2"),
"item1",
c("var12", "var15", "var17"),
c("item3", "item5", "item7"),
"var22",
c("var27", "var29", "var33", "var34"))
如您所见,lst1
中的某些组件包含一个或多个变量名称。 lst2
包含 lst1
中每个变量名称的值,但每个都在单独的组件中:
lst2 <- list(var1 = as.character(c(1, 2, 3, 5, 6)),
var2 = as.character(c(1, 3, 4, 5, 6, 7)),
item1 = letters[1:5],
var12 = as.character(1:3),
var15 = as.character(1:5),
var17 = as.character(1:6),
item3 = letters[3:8],
item5 = letters[4:9],
item7 = letters[5:10],
var22 = as.character(2:7),
var27 = as.character(4:10),
var29 = as.character(3:8),
var33 = as.character(1:4),
var34 = as.character(4:9))
这两个列表要大得多,是我处理过的以前代码的产物。我想要实现的是获得一个列表 lst1
,其中每个组件都包含来自 lst2
的连接元素,而不是变量名称,用于属于 lst1
中该组件的所有名称,像
lst3 <- list(c("1", "2", "3", "5", "6", "1", "3", "4", "5", "6", "7"),
c("a", "b", "c", "d", "e"),
c("1", "2", "3", "1", "2", "3", "4", "5", "1", "2", "3", "4", "5", "6"),
c("c", "d", "e", "f", "g", "h", "d", "e", "f", "g", "h", "i", "e", "f", "g", "h", "i", "j"),
c("2", "3", "4", "5", "6", "7"),
c("4", "5", "6", "7", "8", "9", "10", "3", "4", "5", "6", "7", "8", "1", "2", "3", "4", "4", "5", "6", "7", "8", "9"))
并且可能只获取每个组件中排序后的唯一值。 这怎么可能?
编辑: 我在给出 lst3
示例的部分更新了我的 post,因为我发现了 lst3
中的错误.
尝试
lapply(lst1, function(x) sort(unique(unlist(lst2[x], use.names=FALSE))))
如果我们不需要 sort
并获得 unique
值
lapply(lst1, function(x) unlist(lst2[x], use.names=FALSE))
#[[1]]
#[1] "1" "2" "3" "5" "6" "1" "3" "4" "5" "6" "7"
#[[2]]
#[1] "a" "b" "c" "d" "e"
#[[3]]
#[1] "1" "2" "3" "1" "2" "3" "4" "5" "1" "2" "3" "4" "5" "6"
#[[4]]
#[1] "c" "d" "e" "f" "g" "h" "d" "e" "f" "g" "h" "i" "e" "f" "g" "h" "i" "j"
#[[5]]
#[1] "2" "3" "4" "5" "6" "7"
#[[6]]
#[1] "4" "5" "6" "7" "8" "9" "10" "3" "4" "5" "6" "7" "8" "1" "2"
#[16] "3" "4" "4" "5" "6" "7" "8" "9"