我目前正在从事 Sabermetric 研究项目,并且一整天都在尝试在数据框中创建一个新列来显示给定比赛的首发投手。本质上,如果我使用下面的示例,我有“a”和“b”的数据,但我无法弄清楚如何创建“c”作为“a”的每个唯一值的“b”的第一个值'。这应该很容易,但我刚刚开始学习 R。
a b c
1 1 1 1
2 1 2 1
3 1 3 1
4 1 4 1
5 1 5 1
6 1 6 1
7 2 7 7
8 2 8 7
9 2 1 7
10 2 2 7
11 2 3 7
12 2 4 7
13 3 5 5
14 3 6 5
15 3 7 5
到目前为止我已经使用了mutate
和group_by
想出
sample <- sample %>% group_by(a) %>% mutate(c = first(b))
但这只会使“c”的每个值成为第一个“b”的第一个值。因此,在上面的示例中,我当前的代码使“c”的每个值都等于 1。
我错过了一些东西,有什么建议吗?
最佳答案
我们可以使用基础R
df1$c <- with(df1, ave(b, a, FUN= function(x) head(x,1)))
或者使用data.table
library(data.table)
setDT(df1)[, c:= head(b, 1), by = a]
关于r - 使用 mutate 创建一个新列,其中包含 R 中每个组的第一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37094600/