如何从r中一组的所有值中减去最大值
how to subtract the max value from all values of a group in r
我目前有一个看起来像这样的数据框
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
在按 'tree' 分组后创建新的列,即取 max
的差值 (-
) 'age' 和每个 'age' 值创建 'new_age'
library(dplyr)
df1 <- df1 %>%
group_by(tree) %>%
mutate(new_age = max(age) - age)
-输出
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
或在 base R
中与 ave
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))
我目前有一个看起来像这样的数据框
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
在按 'tree' 分组后创建新的列,即取 max
的差值 (-
) 'age' 和每个 'age' 值创建 'new_age'
library(dplyr)
df1 <- df1 %>%
group_by(tree) %>%
mutate(new_age = max(age) - age)
-输出
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
或在 base R
中与 ave
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))