如何实现此功能?
test <- data.frame(a = 1:5,
b = 6:10)
test2 <- data.frame(c = 11:15,
bb = 6:10)
test %>% left_join(test2, by = c(paste0('b', paste(rep('b', 1), collapse = '')) = 'b'))
目前我收到错误:Error: unexpected '=' in "test %>% left_join(test2, by = c(paste0('b', paste(rep('b', j), collapse = '')) ="
在rep()
中,函数当前为1,但其想法是稍后将其更改为索引,以便对不同的输入使用相同的代码。
如果对by
语句使用a = b
语法,则需要将其包含在c()
中,例如by = c(a = b)
,而不是by = a = b
中,这将生成语法错误。
在您的情况下,我还会将复杂的paste0
分配给一个变量,这样代码就更可读了。
这应该有效:
test <- data.frame(a = 1:5,
b = 6:10)
test2 <- data.frame(c = 11:15,
bb = 6:10)
col_to_join = c(paste0('b', paste(rep('b', 1), collapse = '')))
test %>% left_join(test2, by = c("b" = col_to_join))
您有一些问题,但我认为这段代码可以满足您的要求。
test %>% left_join(test2,
by = c("b" = paste0('b', paste(rep('b', 1), collapse = ''))))
首先,将列名按正确的顺序排列。其次,这些名称需要在一个向量中。第三,粘贴物周围的c()
是不需要的。