数据
我有一个类似于下面的虚拟数据集。
代码
library(dplyr)
set.seed(111)
data <- tibble(ID = sort(sample(LETTERS, 10, F)),
A = round(rnorm(10, 4, 1), 1),
B = sample(0:20, 10, F),
C = rep(c(33, 9), each = 5))
data <- rbind(data, c("ratio", 0.7, 0.25, 0.05))
问题
我想产生一个新的数据框,其中每一行都乘以称为比率的行(不包括具有ID的第一列)。然后可以从输出表中删除比率行。
在dplyr中有一种简单的方法吗?
答案 0 :(得分:2)
dplyr 更适合于列式操作,而不是像这样的按行操作。但这在基本R中非常简单:
library(dplyr)
set.seed(111)
data <- tibble(ID = sort(sample(LETTERS, 10, F)),
A = round(rnorm(10, 4, 1), 1),
B = sample(0:20, 10, F),
C = rep(c(33, 9), each = 5))
ratio <- data.frame(A = 0.7, B = 0.25, C = 0.05) # your mutliplier
ratio <- ratio[rep(1, nrow(data)),] # replicated to match size of 'data'
data[2:4] <- data[2:4] * ratio # multiply
ID A B C
<chr> <dbl> <dbl> <dbl>
1 A 2.87 0.25 1.65
2 B 1.75 2.5 1.65
3 H 2.10 2 1.65
4 I 2.17 4.5 1.65
5 K 2.45 1.5 1.65
6 L 2.66 2.75 0.45
7 P 2.52 5 0.45
8 S 4.06 4.75 0.45
9 V 3.08 4.25 0.45
10 X 3.36 2.25 0.45
或者,您可以避免使用Map
复制“比率”数据框以匹配主数据集的大小:
ratio <- data.frame(A = 0.7, B = 0.25, C = 0.05)
data[2:4] <- Map('*', data[2:4], ratio)