R 将数据帧的每个值乘以id搜索的另一个数据帧的行

R 将数据帧的每个值乘以id搜索的另一个数据帧的行,r,dataframe,multiplication,R,Dataframe,Multiplication,我是R的新手,我已经尝试了很多方法来解决这个问题,如果有人能帮助我,我将非常感激!这是我的问题: 我有两个数据帧(df1和df2),我需要的是将df1的每个值乘以按id搜索的df2行。这是我要查找的示例: df1<-data.frame(ID=c(1,2,3), x1=c(6,3,2), x2=c(2,3,1), x3=c(4,10,7)) df1 df2<-data.frame(ID=c(1,2,3), y1=c(0.01,0.02,0.05), y2=c(0.2,0.03,0.1

我是R的新手,我已经尝试了很多方法来解决这个问题,如果有人能帮助我,我将非常感激!这是我的问题:

我有两个数据帧(df1和df2),我需要的是将df1的每个值乘以按id搜索的df2行。这是我要查找的示例:

df1<-data.frame(ID=c(1,2,3), x1=c(6,3,2), x2=c(2,3,1), x3=c(4,10,7))
df1
df2<-data.frame(ID=c(1,2,3), y1=c(0.01,0.02,0.05), y2=c(0.2,0.03,0.11), y3=c(0.3,0.09,0.07))
df2

#Example of what I need
df1xdf2<- data.frame(ID=c(1,2,3), r1=c(0.06,0.06,0.1), r2=c(1.2,0.09,0.22), r3=c(1.8,0.27,0.14),
                     r4=c(0.02,0.06,0.05),r5=c(0.4,0.09,0.11),r6=c(0.6,0.27,0.07),r7=c(0.04,0.2,0.35),r8=c(0.8,0.3,0.77),r9=c(1.2,0.9,0.49))

df1xdf2


df1您可以使用dplyr包

#Example with dplyr

require(dplyr)
# First we use merge() to join both DF
result <- merge(df1, df2, by = "ID") %>% 
  mutate(r1 = x1*y1,
         r2 = x1*y2,
         r3 = etc.)
#dplyr示例
需要(dplyr)
#首先,我们使用merge()连接两个DF
结果%
突变(r1=x1*y1,
r2=x1*y2,
r3=等)

在mutate()中,您可以指定新的列公式和名称

您可以使用
lappy
df1
的每一列与complete
df2
相乘。我们可以
cbind
将数据帧放在一起并重命名列

output <- do.call(cbind, lapply(df1[-1], `*`, df2[-1]))
cbind(df1[1], setNames(output, paste0("r", seq_along(output))))

#  ID   r1   r2   r3   r4   r5   r6   r7   r8   r9
#1  1 0.06 1.20 1.80 0.02 0.40 0.60 0.04 0.80 1.20
#2  2 0.06 0.09 0.27 0.06 0.09 0.27 0.20 0.30 0.90
#3  3 0.10 0.22 0.14 0.05 0.11 0.07 0.35 0.77 0.49

output带有
map的选项

library(tidyverse)
bind_cols(df1[1], map_dfc(df1[-1], `*`, df2[-1]))

或者在
base R
中复制列并相乘

out <- cbind(df1[1], df1[-1][rep(seq_along(df1[-1]), each = 3)] *
         df2[-1][rep(seq_along(df2[-1]), 3)])
names(out)[-1] <- paste0("r", seq_along(out[-1]))

out
#  ID   r1   r2   r3   r4   r5   r6   r7   r8   r9
#1  1 0.06 1.20 1.80 0.02 0.40 0.60 0.04 0.80 1.20
#2  2 0.06 0.09 0.27 0.06 0.09 0.27 0.20 0.30 0.90
#3  3 0.10 0.22 0.14 0.05 0.11 0.07 0.35 0.77 0.49

out我的问题是我需要按行,而不是按列。通过该合并,我将x1和y1列相乘,我需要df2行乘以每个值(按ID搜索)