【问题标题】:Multiply various subsets of a data frame by different elements of a vector R将数据帧的各种子集乘以向量 R 的不同元素
【发布时间】:2020-10-21 16:12:39
【问题描述】:

我有一个数据框:

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)

我想将 cols Room1、Room2 和 Room3 乘以每个唯一 ID 号的向量的不同元素,并输出一个新的数据帧 (df2)。

我设法使用以下方法将每个 id 的每一列乘以向量的每个元素:

samp_func <- function(x) {
  x*vals[i]
}

for (i in vals) {
  df2 <- df %>% mutate_at(c("Room1", "Room2", "Room3"), samp_func)
}

但结果 df (df2) 是每个 Room 列乘以每个不同 id 的向量 (vals) 的相同元素。当我想要的是每个 Room 列(每个 id)乘以向量 vals 的不同元素时。如果不清楚,请提前抱歉,我是初学者,仍在掌握术语。

谢谢!

编辑:所需的输出应如下所示,其中每个 ID 的列已乘以向量 vals 的不同元素。

   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

【问题讨论】:

  • 您能否为您的示例显示所需的输出?我不确定您是如何选择要乘以每个房间列的 vals 元素。
  • 我添加了所需输出的快照。 vals 的任何元素都可以用于乘以每个 ID 的列,只要它是每个 ID 的不同 vals 元素。

标签: r dplyr


【解决方案1】:

这应该可以解决您的问题。您可以使用所有 id、值组合的新数据集来确保计算每个组合并合并 Room 值。然后使用 mutate 创建新的 Room 列。

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

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)

【讨论】:

    猜你喜欢
    • 2011-10-16
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多