我正在尝试编写一个函数,该函数需要从结果数据框中排除用户传递的变量。我也借此机会进一步了解了新的 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
我想看看是否可以用管道选择语句替换最后一个语句。但是,否定似乎不起作用。
我能够得到类似的东西:
out %>% select(!!temp_col)
工作,但这显然只选择.k
. 我无法得到类似的东西:
out %>% select(-!!temp_col)
去工作。