gpt4 book ai didi

r - 选择第一个观察到的数据并利用 mutate

转载 作者:行者123 更新时间:2023-12-04 18:05:07 24 4
gpt4 key购买 nike

我的数据遇到问题,我想获取第一个观察到的 ob评分 score每个人id并从最后观察到的 score 中减去它.

要求第一个观察减去最后一个观察的问题是有时第一个观察数据丢失。

无论如何要为每个人要求第一个观察到的分数,从而跳过任何缺失的数据?

我构建了下面的 df 来说明我的问题。

help <- data.frame(id = c(5,5,5,5,5,12,12,12,17,17,20,20,20),
ob = c(1,2,3,4,5,1,2,3,1,2,1,2,3),
score = c(NA, 2, 3, 4, 3, 7, 3, 4, 3, 4, NA, 1, 4))

id ob score
1 5 1 NA
2 5 2 2
3 5 3 3
4 5 4 4
5 5 5 3
6 12 1 7
7 12 2 3
8 12 3 4
9 17 1 3
10 17 2 4
11 20 1 NA
12 20 2 1
13 20 3 4

我希望运行的是能给我带来...
   id ob score  es
1 5 1 NA -1
2 5 2 2 -1
3 5 3 3 -1
4 5 4 4 -1
5 5 5 3 -1
6 12 1 7 3
7 12 2 3 3
8 12 3 4 3
9 17 1 3 -1
10 17 2 4 -1
11 20 1 NA -3
12 20 2 1 -3
13 20 3 4 -3

我正在尝试使用 dplyr 并且我了解“group_by”命令的使用,但是,不确定如何“选择”仅首先观察到的分数然后变异以创建 es .

最佳答案

我会用 first()last() (dplyr 函数)和 na.omit() (来自默认的 stats 包。

首先,我会确保您的 score 列是一个具有适当 NA 值的数字列(不是您示例中的字符串)

help <- data.frame(id = c(5,5,5,5,5,12,12,12,17,17,20,20,20),
ob = c(1,2,3,4,5,1,2,3,1,2,1,2,3),
score = c(NA, 2, 3, 4, 3, 7, 3, 4, 3, 4, NA, 1, 4))

那么你可以做
library(dplyr)
help %>% group_by(id) %>% arrange(ob) %>%
mutate(es=first(na.omit(score)-last(na.omit(score))))

关于r - 选择第一个观察到的数据并利用 mutate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30787047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com