将数据帧的不同子集乘以向量R的不同元素

将数据帧的不同子集乘以向量R的不同元素,r,dplyr,R,Dplyr,我有一个数据框: df<-data.frame(id=rep(1:10,each=10), Room1=rnorm(100,0.4,0.5), Room2=rnorm(100,0.3,0.5), Room3=rnorm(100,0.7,0.5)) 这应该能解决你的问题。可以使用包含所有id、值组合的新数据集,以确保计算每个组合并合并房间值。然后使用mutate创建新的房间柱 另外,在将来,我建议在用

我有一个数据框:

df<-data.frame(id=rep(1:10,each=10),
               Room1=rnorm(100,0.4,0.5),
               Room2=rnorm(100,0.3,0.5),
               Room3=rnorm(100,0.7,0.5))

这应该能解决你的问题。可以使用包含所有id、值组合的新数据集,以确保计算每个组合并合并房间值。然后使用mutate创建新的房间柱

另外,在将来,我建议在用随机数据提问时设定一个种子,因为有人更容易复制您的输出

library(dplyr)
set.seed(0)
df<-data.frame(id=rep(1:10,each=10),
               Room1=rnorm(100,0.4,0.5),
               Room2=rnorm(100,0.3,0.5),
               Room3=rnorm(100,0.7,0.5))
vals <- sample(7:100, 10)
other_df <- data.frame(id=rep(1:10),
                       val = rep(vals, 10))

df2 <- inner_join(other_df, df)
df2 <- df2 %>%
  mutate(Room1 = Room1*val,
         Room2 = Room2*val,
         Room3 = Room3*val)
库(dplyr)
种子集(0)

DF您能为您的示例显示所需的输出吗?我不确定如何选择VAL的哪个元素乘以每个房间列。我已添加了所需输出的快照。VAL的任何元素都可以用于乘以每个ID的列,只要它是每个ID的不同VAL元素。
samp_func <- function(x) {
  x*vals[i]
}

for (i in vals) {
  df2 <- df %>% mutate_at(c("Room1", "Room2", "Room3"), samp_func)
}
   id         Room1       Room2        Room3
1   1  24.674826880  60.1942571  46.81276141
2   1  21.970270107  46.0461779  35.09928150
3   1  26.282357614  -3.5098880  38.68400541
4   1  29.614182061 -39.3025587  25.09146592
5   1  33.030886472  46.0354881  42.68209027
6   1  41.362699668 -23.6624632  26.93845129
7   1   5.429031042  26.7657577  37.49086963
8   1  18.733422977 -42.0620572  23.48992138
9   1 -17.144070723   9.9627315  55.43999326
10  1  45.392182468  20.3959968 -16.52166621
11  2  30.687978299 -11.7194020  27.67351631
12  2  -4.559185345  94.9256561   9.26738357
13  2  86.165076849  -1.2821515  29.36949423
14  2 -12.546711562  47.1763755 152.67588456
15  2  18.285856423  60.5679496 113.85971720
16  2  72.074929648  47.6509398 139.69051486
17  2 -12.332519694  67.8890324  20.73189965
18  2  80.889634991  69.5703581  98.84404415
19  2  87.991093995 -20.7918559 106.13610773
20  2  -2.685594148  71.0611693  47.40278949
21  3   4.764445589  -7.6155681  12.56546664
22  3  -1.293867841  -1.1092243  13.30775785
23  3  16.114831628  -5.4750642   8.58762550
24  3  -0.309470950   7.0656088  10.07624289
25  3  11.225609780   4.2121241  16.59168866
26  3  -3.762529113   6.4369973  15.82362705
27  3  -5.103277731   0.9215625  18.20823042
28  3 -10.623165177  -5.2896293  33.13656839
29  3  -0.002517872   5.0861361  -0.01966699
30  3  -2.183752881  24.4644310  13.55572730
library(dplyr)
set.seed(0)
df<-data.frame(id=rep(1:10,each=10),
               Room1=rnorm(100,0.4,0.5),
               Room2=rnorm(100,0.3,0.5),
               Room3=rnorm(100,0.7,0.5))
vals <- sample(7:100, 10)
other_df <- data.frame(id=rep(1:10),
                       val = rep(vals, 10))

df2 <- inner_join(other_df, df)
df2 <- df2 %>%
  mutate(Room1 = Room1*val,
         Room2 = Room2*val,
         Room3 = Room3*val)