Я пытаюсь построить скрипт на R, который будет объединяться в разные поля на основе ввода пользователя. Я использую версию 0.7.6 dplyr через tidyverse (1.2.1).
Я мог бы построить несколько, в основном, одинаковых операторов соединения и ссылаться на разные, основываясь на вводе, но это выглядит не элегантно. Ниже приведен пример с комментариями под этим. Я все еще новичок в R, поэтому я прошу прощения, если это само по себе неэлегантно:
library(tidyverse)
df <- tibble(
a = letters[1:20],
b = c(1:5,1:5,1:5,1:5)
)
ref <- tibble(
let_ref_col = c('e','g','b','d','f'),
num_ref_col = c(2,4,NA,NA,NA)
)
df2 <- semi_join(df,ref,c('b'='num_ref_col'))
df3 <- semi_join(df,ref,c('b'=colnames(ref)[2]))
df2==df3 #just to check
df4 <- semi_join(df,ref,c(colnames(df)[2]=colnames(ref)[2]))
df2
вернет 8 строк, где столбец b в df равен 2 или 4.
R, кажется, не возражает против того, чтобы я обобщил имя второй переменной соединения, о чем свидетельствует `df3.
Когда я пытаюсь применить ту же самую логику к первой переменной, я получаю сообщение об ошибке от df4
:
Error: unexpected '=' in "df4 <- inner_join(df,ref,c(colnames(df)[2]="
Я бы хотел иметь возможность иметь относительную ссылку для обоих полей, если это возможно. Что-то вроде:
JOIN_DESIRED <- 2
df5 <- semi_join(df,ref,c(colnames(df)[JOIN_DESIRED] = colnames(ref)[JOIN_DESIRED])
Который может быть изменен на 1, чтобы соединяться буквами вместо цифр