[主要数据集:
df <- data.frame(var1 =c(1, 2, 1), var2 = c(2, 3, 3))
我的映射表:
mt <- data.frame(var1 = c(1, 2, 1), var2 = c(2, 3,3), color = c('red', 'blue', 'yellow'))
将df合并到mt,保留df中的所有行:
df <- merge(x = df, y=mt, by=c("var1", "var2"), all.x = TRUE)
问题:如何动态更改代码,以便如果我有4个var(即var1,var2,var3,var4),则代码将自动调整为以下代码?
df <- merge(x = df, y=mt, by=c("var1", "var2", "var3", "var4"), all.x = TRUE)
类似地,如果我们有5个var,它将自动调整为:
df <- merge(x = df, y=mt, by=c("var1", "var2", "var3", "var4", "var5"), all.x = TRUE)
如果两个数据集都具有与by
中使用的相同的列名,那么我们就无需指定by
,因为它通过匹配相交的列名来自动获取列。
merge(df, mt, all.x = TRUE)
但是,如果还有其他列,并且只想指定“ var”列,则选项为startsWith
merge(x = df, y=mt, by= names(df)[startsWith(names(df), "var")], all.x = TRUE)
或grep
merge(x = df, y=mt, by= grep("^var\\d+$", names(df), value = TRUE), all.x = TRUE)