(基本)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")