假设我有一个这样的数据框:
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列我无法编写所有组合的代码)。自动创建的列的名称应具有某种命名方案,因为稍后需要过滤它们。
答案 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]]
}
}
}
这假定在原始数据框中不存在新名称。因此,如果您的原始数据帧包含列A
,B
和AB
,则将无法使用。