Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从r中一组的所有值中减去最大值_R_Dataframe_Subtraction - Fatal编程技术网

如何从r中一组的所有值中减去最大值

如何从r中一组的所有值中减去最大值,r,dataframe,subtraction,R,Dataframe,Subtraction,我现在有一个数据框,看起来像这样 tree cookie age C1T1 A 113 C1T1 B 108 C1T1 C 97 C1T2 A 133 C1T2 B 110 C1T2 C 100 我想用每个cookie的给定年龄减去每个树的最大年龄(因此在C1T1中从113、108和97中减去113,在C1T2中从133、110和100中减去133)。然后,我希望将新值保存为同一数据帧中的一列。所以它看起来像: tree cooki

我现在有一个数据框,看起来像这样

tree cookie age
C1T1   A    113
C1T1   B    108
C1T1   C     97
C1T2   A    133
C1T2   B    110
C1T2   C    100
我想用每个cookie的给定年龄减去每个树的最大年龄(因此在C1T1中从113、108和97中减去113,在C1T2中从133、110和100中减去133)。然后,我希望将新值保存为同一数据帧中的一列。所以它看起来像:

tree cookie age new_age
C1T1   A    113  0
C1T1   B    108  5
C1T1   C    97  16

任何关于如何做到这一点的建议都将不胜感激

我们可以利用
mutate
在按“树”分组后创建新列,即取“age”的
max
和每个“age”值的差值(
-
)来创建“new\u age”

library(dplyr)
df1 <-  df1 %>%
           group_by(tree) %>%
           mutate(new_age = max(age) - age)
数据
df1
df1
# A tibble: 6 x 4
# Groups:   tree [2]
#  tree  cookie   age new_age
#  <chr> <chr>  <int>   <int>
#1 C1T1  A        113       0
#2 C1T1  B        108       5
#3 C1T1  C         97      16
#4 C1T2  A        133       0
#5 C1T2  B        110      23
#6 C1T2  C        100      33
df1$new_age <- with(df1, ave(age, tree, FUN = max) - age)
df1 <- structure(list(tree = c("C1T1", "C1T1", "C1T1", "C1T2", "C1T2", 
"C1T2"), cookie = c("A", "B", "C", "A", "B", "C"), age = c(113L, 
108L, 97L, 133L, 110L, 100L)), class = "data.frame", row.names = c(NA, 
-6L))