带有/不带有dplyr的R:创建新列作为prev的组合。每行列

时间:2018-06-26 02:01:22

标签: r dplyr

假设我有一个这样的数据框:

A B C
1 0 1
0 1 1
1 0 0

我想使用dplyr(或其他lib)生成以下导数:

A B C AB AC BC
1 0 1 0  1  0
0 1 1 0  0  1
1 0 0 0  0  0

因此,我想在数据框中自动创建新列,它们的值将是初始列集的乘积(因此,在这种情况下,每行3个乘积-A * B,A * C和B *C)。要点是自动做到这一点(我有6列我无法编写所有组合的代码)。自动创建的列的名称应具有某种命名方案,因为稍后需要过滤它们。

2 个答案:

答案 0 :(得分:4)

我们可以使用$data_profil = DB::table("staffs")->select("id")->whereId($id)->first(); 获取列组合,然后使用for循环创建新列。

combn

答案 1 :(得分:1)

有时候最好不要太刻苦地进行编码:

df <- data.frame(A = c(1, 0, 1), 
                 B = c(0, 1, 0),
                 C = c(1, 1, 0))
J <- K <- seq_along(df)
J_n <- K_n <- names(df)

for (j in J) {
  for (k in K) {
    if (j < k) {
      j_name <- J_n[j]
      k_name <- K_n[k]
      df[[paste0(j_name, k_name)]] <- df[[j]] * df[[k]]
    }
  }
}

这假定在原始数据框中不存在新名称。因此,如果您的原始数据帧包含列ABAB,则将无法使用。