(基本)R组内的减法和乘法
我想对每组(基本)R组内的减法和乘法,r,dataframe,math,data-manipulation,R,Dataframe,Math,Data Manipulation,我想对每组X的以下内容进行R编码: (Y-1)*1/3*Z/100 因此,第2行的输出为:(2-1)*1/3*25/100=0.083 第2行和第8行所需输出也作为示例添加 X Y Z output 1 A 1 25 0 2 A 2 25 0.08 3 A 3 0 0 4 A 4 50 0.5 5 B 1 0 0 6 B 2 0 0 7 B 3 0 0 8 B 4 100
X
的以下内容进行R编码:
(Y
-1)*1/3*Z
/100
因此,第2行的输出为:(2-1)*1/3*25/100=0.083
第2行和第8行所需输出也作为示例添加
X Y Z output
1 A 1 25 0
2 A 2 25 0.08
3 A 3 0 0
4 A 4 50 0.5
5 B 1 0 0
6 B 2 0 0
7 B 3 0 0
8 B 4 100 1
谢谢 它可以在
数据表中变得更有效
library(data.table)
setDT(df1)[, output := sum((Y-1) * 1/3 * Z /100), X]
df1
# X Y Z output
#1: A 1 25 0.5833333
#2: A 2 25 0.5833333
#3: A 3 0 0.5833333
#4: A 4 50 0.5833333
#5: B 1 0 1.0000000
#6: B 2 0 1.0000000
#7: B 3 0 1.0000000
#8: B 4 100 1.0000000
如果我们还需要按另一个变量分组,请使用(
或使用dplyr
library(dplyr)
df1 %>%
group_by(X) %>%
mutate(output = sum((Y-1) * 1/3 * Z /100))
或者使用更多变量
df1 %>%
group_by(X, year) %>%
mutate(output = sum((Y-1) * 1/3 * Z /100))
注:输入数据中未显示“年”。它来自OP的原始数据
数据
df1为什么您需要使用(df1,(Y-1)*1/3*Z/100)
按分组,因为预期只有两行,不清楚这些行是矢量化的,所以应该比较有效。您可以在数据上测试代码您的计算基于每个元素,而不是基于组(除非我错了)具有基本R
功能。无需使用$
或[
或[
即可方便地选择列,也就是说,如果我不将与一起使用,代码将是(df1$Y-1)*1/3*df1$Z/100,你能测试我帖子上的数据吗。
df1 %>%
group_by(X, year) %>%
mutate(output = sum((Y-1) * 1/3 * Z /100))
df1 <- structure(list(X = c("A", "A", "A", "A", "B", "B", "B", "B"),
Y = c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), Z = c(25L, 25L, 0L,
50L, 0L, 0L, 0L, 100L)), row.names = c("1", "2", "3", "4",
"5", "6", "7", "8"), class = "data.frame")