我的数据集看起来像下面这个 R
数据集
dat <- data.frame(z = seq(0.5, 1,0.1), matrix(1:24, nrow = 6) )
colnames(dat) <- c("z", "A", "B", "C", "D")
dat
# z A B C D
# 0.5 1 7 13 19
# 0.6 2 8 14 20
# 0.7 3 9 15 21
# 0.8 4 10 16 22
# 0.9 5 11 17 23
# 1.0 6 12 18 24
我想对列
A
,B
,C
和 D
每个输入执行相同的操作,因此我需要在 dat
中添加另一列,在这一列中,对于每个这些列中的每行中剩余三列的条目求和,将其除以行条目的标准偏差,再乘以列 z
中相应行值的比率。例如,取列 A
中的第一个条目。该操作为 0.5 * (7 + 13 + 19) / sd(c(7, 13, 19))
。对于列 B
中的第二个条目,它应为 0.6 * (2 + 14 + 20) / sd(c(2, 14, 20))
。这些操作生成一个 6 x 4
矩阵,我需要将其附加到 dat
。我的数据集非常庞大(而且我希望能够快速地启动它),因此我想知道最快的方法是什么。使用
for
循环相当慢(而且会使引导程序变得更糟)。我正在考虑使用 dplyr
包,但我不太熟悉。谢谢。
tidyverse
似乎是最快的方法。谢谢你,也感谢其他所有人的回答。 - Andrewsapply
比tidyverse
慢,对吧?我不熟悉tidyverse
。你能让我了解一下map_dbl
的直觉意义是什么吗(当然它执行操作,但我不知道它是如何完成的)? - Andrewsapply
实际上是最快的,但我需要以不同的方式对数据进行子集操作多次重复相同的操作,因此tidyverse
似乎更可取。我需要更好地掌握它的逻辑结构。 - Andrew