数据
我有一个与下面的虚拟数据集类似的数据集。
码
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))
问题
我想要生成一个新的dataframe,其中每一行乘以名为ratio的行(不包括带有ID的第一列)。然后,可以从输出表中删除比率行。
在dplyr中有一种简单的方法吗?
发布于 2019-01-07 02:04:00
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)
https://stackoverflow.com/questions/54067655
复制相似问题