Я пытаюсь написать функцию, которая должна исключить переменную, переданную пользователем, из результирующего фрейма данных. Я также пользуюсь этой возможностью, чтобы узнать немного больше о новом синтаксисе dplyr.
Функция действует как перекрестное соединение для фреймов данных. Я хочу использовать его как чистый способ дублирования данных по параметрам функции.
Функция работает следующим образом:
crossjoin_df <- function(df1, df2, temp_col = ".k") {
df1 <- df1 %>%
mutate(!!temp_col := 1)
df2 <- df2 %>%
mutate(!!temp_col := 1)
out <- left_join(df1, df2, by = temp_col)
# I'm trying to replace the next line
out[,!names(out)==temp_col]
}
params <- data.frame(k = c(11,10),
n = c(27,26))
data <- data.frame(a = 1:3,
b = 4:6)
crossjoin_df(params, data) # 6 row data set
Я хочу посмотреть, можно ли заменить последний оператор оператором select с конвейером. Однако отрицание, похоже, не работает.
Я могу получить что-то вроде:
out %>% select(!!temp_col)
работать, но это, очевидно, выбирает только .k
. Я не могу получить что-то вроде:
out %>% select(-!!temp_col)
работать.
temp_var
является строкой, вам нужно использоватьrlang::sym
, чтобы превратить ее в квазуру, если вы хотите снять кавычки с!!
, например.out %>% select(-!!rlang::sym(temp_col))
- person alistaire   schedule 24.11.2017temp_var
пустым, потому что мне нужно, чтобы он был слева от оператораmutate
. Не уверен, что есть более чистый способ сделать это. Я надеялся, что смогу придерживаться только dplyr. - person vitallish   schedule 24.11.2017