我在这个问题所示的玩具示例的相同结构中有两个大列表。
dput(head(list1)):
list(FEB_GAMES = c(GAME1 = c("Stan", "Kenny", "Cartman", "Kyle",
"Butters"), GAME2 = c("Kenny", "Cartman", "Kyle", "Butters")),
MAR_GAMES = c(GAME3 = c("Stan", "Kenny", "Cartman", "Butters"
), GAME4 = c("Kenny", "Cartman", "Kyle", "Butters")))
dput(head(list2)):
list(first = c("Stan", "Kenny", "Cartman", "Kyle", "Butters",
"Kenny", "Cartman", "Kyle", "Butters"), second = c("Stan", "Kenny",
"Cartman", "Wendy", "Ike"), third = c("Randy", "Randy", "Randy",
"Randy"))
我想将这两个列表变成一个大的data.frame /矩阵。行名将来自列表1(GAME1,GAME2,GAME3,GAME4)。别名将是列表2(第一,第二,第三)的列表名称。矩阵中的信息将是一个整数,它表示在两个列表中找到一个公共字符的次数。例如,GAME1xfirst包含9个公共字符,而GAME1xthird包含0个公共字符。
输出如下所示:
first second third
GAME1 9 3 0
GAME2 8 2 0
GAME3 8 3 0
GAME4 8 2 0
因此,[1,1]中的值将是在列表1的GAME1列表和列表2中的第一个列表中找到一个公共字符的时间总和。
注意。列表1和列表2中的列表都有不同数量的值。
怎么样 ...
sapply(l2, function(x) {
sapply(unlist(l1, recursive = FALSE), function(y) sum(x %in% y))
})
# first second third
# FEB_games.GAME1 9 3 0
# FEB_games.GAME2 8 2 0
# MAR_games.GAME3 7 3 0
# MAR_games.GAME4 8 2 0
但是,可能不是最有效的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句