我想使用dplyr中的bind_rows命令将大量的标题组合成一个标题。所有标题都有相同的列标题。我想避免在命令中键入所有标题的名称。这些标题的命名约定有一个明显的模式。下面是长文:
all <- distinct(bind_rows(
level1_1, level1_2, level1_3, level1_4, level1_5, level1_6, level1_7, level1_8,
level2_2, level2_3, level2_4, level2_5, level2_6, level2_7, level2_8,
level3_3, level3_4, level3_5, level3_6, level3_7, level3_8,
level4_4, level4_5, level4_6, level4_7, level4_8,
level5_5, level5_6, level5_7, level5_8,
level6_6, level6_7, level6_8,
level7_7, level7_8,
level8_8))
我想知道是否有更紧凑的方式来写这个命令?
通过指定pattern
ls
返回的字符串对象名称中获得具有mget
的list
对象的值。library(dplyr)
out <- distinct(bind_rows(mget(ls(pattern = '^level\d+_\d+$'))))
pattern
建议检查全局环境中的对象是否以'level'开头(^
),后跟一个或多个数字(\d+
),然后是下划线和一个或多个数字(_\d+
),直到字符串的末尾($
)
如果有其他类似的对象,想用特定的对象名称约束它,创建expand.grid
和paste
的组合
nm1 <- with(subset(expand.grid(1:8, 1:8), Var1 >= Var2),
paste0("level", Var2, "_", Var1))
distinct(bind_rows(mget(nm1)))