R 在df中自动变异多个列

R 在df中自动变异多个列,r,dplyr,R,Dplyr,我想从列列表中自动生成数据帧中的交互。 我举了一个例子 library(tidyverse) library(nycflights13) df<- nycflights13::weather interactions <- c("hour","temp","dewp","humid","wind_dir","wind_speed") df<- df %>

我想从列列表中自动生成数据帧中的交互。 我举了一个例子

library(tidyverse)
library(nycflights13)

df<- nycflights13::weather
interactions <- c("hour","temp","dewp","humid","wind_dir","wind_speed")
df<- df %>% mutate (hour_temp= hour*temp, hour_dewp= hour*dewp)
库(tidyverse)
图书馆(nycflights13)

df我们可以使用
combn
获得“交互”中的所有组合,每次取2,在
combn
中指定
FUN
选择这些列,
转换产品(
*
),并将它们与原始数据集绑定

library(dplyr)
library(purrr)
library(stringr)
out <- combn(interactions, 2, function(x) df %>%
       dplyr::select(x) %>%
       transmute(!! str_c(x, collapse="_"):= reduce(., `*`)),
          simplify = FALSE) %>% 
   bind_cols %>% 
   bind_cols(df, .)

或使用
base R

m1 <- combn(interactions, 2)
df[paste(m1[1,], m1[2, ], sep="_")] <- lapply(asplit(m1, 2), 
       function(x) do.call(`*`, df[x]))

m1谢谢。这个例子很好,但是当尝试在另一段代码中使用它时,我在select(,x)中得到了
错误:未使用的参数(x)
@Stat.Enthus您使用的是
select
来自
dplyr
还是来自其他包。请尝试
dplyr::选择(x)
,以防它是伪装染料,谢谢!这是一个掩蔽问题。再次感谢。
m1 <- combn(interactions, 2)
df[paste(m1[1,], m1[2, ], sep="_")] <- lapply(asplit(m1, 2), 
       function(x) do.call(`*`, df[x]))