【发布时间】:2016-11-09 16:03:00
【问题描述】:
我有以下数据框df:
v1 v2 v3 v4
1 1 5 7 4
2 2 6 10 3
我想得到下面的数据框df2乘以列v1*v3和v2*v4:
v1 v2 v3 v4 v1v3 v2v4
1 1 5 7 4 7 20
2 2 6 10 3 20 18
如何使用dplyr 做到这一点?使用mutate_each?
我需要一个可以推广到大量变量的解决方案,而不仅仅是 4 个(v1 到 v4)。 这是生成示例的代码:
v1 <- c(1, 2)
v2 <- c(5,6)
v3 <- c(7, 10)
v4 <- c(4, 3)
df <- data.frame(v1, v2, v3, v4)
v1v3 <- c(v1 * v3)
v2v4 <- c(v2 * v4)
df2 <- cbind(df, v1v3, v2v4)
【问题讨论】:
-
df %>% mutate(v1v3=v1*v3) %>% mutate(v2v4=v2*v4) -
我编辑了我的问题。我需要一个可以推广到任意数量的变量而不用全部写出来的答案。
-
所以你想将交替列中的值相乘?
-
好吧,现在:这是一个不同的问题 :-D 您实际上是在要求某人现在为您编写一个循环来生成您的 dplyr 代码。最好将 df1 乘以 df2:从比喻的角度来说,这确实是一个完全不同的蜡球。
-
完全正确,但这不是用 tidyverse 写的... ;-) 当您提出一个问题然后更改它时,它会使下面第一个问题的所有答案都是“错误的”。您最好只选择一个回答了您的问题的回复,然后在新线程中提出您的新问题。你的解决方案很好,但不如你问其他人如何从一开始就解决这个特定问题时得到的一些东西好。然后,您将获得新的很酷的方法来做您不知道的事情 - 例如点积和数据帧到数据帧的乘法。