gpt4 book ai didi

r - 识别纵向数据集中 `letter` 内的最后一个 `ID`

转载 作者:行者123 更新时间:2023-12-01 09:30:44 25 4
gpt4 key购买 nike

我正在尝试识别纵向数据集中 ID 中的最后一个 letter

假设我的数据看起来像这样,

dfL <- data.frame(ID = c(1L, 1L, 1L, 4L, 4L, 4L, 4L, 4L, 9L, 9L, 9L, 9L, 9L, 10L), week = c("BS", 4L, 6L, "BS", 6L, 9L, 9L, 12L, "BS", 4L, 6L, 9L, 12L, "BS"), outcome = c(14L, 28L, 42L, 14L, 46L, 64L, 71L, 85L, 14L, 28L, 51L, 66L, 84L, 0L), letter = c("a", "b", "a", "b", "a", "b", "a", "b", "a", "b", "a", "b", NA, NA)); dfL

每个 ID 都有 s 串字母(ab 的),我需要在 中找到最后一个字母ID把它放在基线上

   ID week outcome letter
1 1 BS 14 a
2 1 4 28 b
3 1 6 42 a
4 4 BS 14 b
5 4 6 46 a
6 4 9 64 b
7 4 9 71 a
8 4 12 85 b
9 9 BS 14 a
10 9 4 28 b
11 9 6 51 a
12 9 9 66 b
13 9 12 84 <NA>
14 10 BS 0 <NA>

我想最终的结果会是这个样子,

   ID week outcome letter last_letter
1 1 BS 14 a a
2 1 4 28 b <NA>
3 1 6 42 a <NA>
4 4 BS 14 b b
5 4 6 46 a <NA>
6 4 9 64 b <NA>
7 4 9 71 a <NA>
8 4 12 85 b <NA>
9 9 BS 14 a b
10 9 4 28 b <NA>
11 9 6 51 a <NA>
12 9 9 66 b <NA>
13 9 12 84 <NA> <NA>
14 10 BS 0 <NA> <NA>

我已经使用 data.table 包中的 which.maxave,但我还是有点卡住了.

最佳答案

使用基础 R 的 ave我会用这样的自定义函数来处理它:

FUN <- function(x) {
if (all(is.na(x))) return(NA)
tail(na.omit(x), 1)
}

dfL$lastL <- with(dfL, ave(letter, ID, FUN=FUN))

## ID week outcome letter lastL
## 1 1 BS 14 a a
## 2 1 4 28 b a
## 3 1 6 42 a a
## 4 4 BS 14 b b
## 5 4 6 46 a b
## 6 4 9 64 b b
## 7 4 9 71 a b
## 8 4 12 85 b b
## 9 9 BS 14 a b
## 10 9 4 28 b b
## 11 9 6 51 a b
## 12 9 9 66 b b
## 13 9 12 84 <NA> b
## 14 10 BS 0 <NA> <NA>

编辑:

如果您希望它看起来像您的 <NA>然后这种方法与 tapply会工作的。

FUN <- function(x) {
if (all(is.na(x))) {
first <- NA
} else {
first <- tail(na.omit(x), 1)
}
out <- as.character(rep(NA, length(x)))
out[1] <- as.character(first)
out
}

dfL$lastL <- factor(unlist(with(dfL, tapply(letter, ID, FUN=FUN))))

## ID week outcome letter lastL
## 1 1 BS 14 a a
## 2 1 4 28 b <NA>
## 3 1 6 42 a <NA>
## 4 4 BS 14 b b
## 5 4 6 46 a <NA>
## 6 4 9 64 b <NA>
## 7 4 9 71 a <NA>
## 8 4 12 85 b <NA>
## 9 9 BS 14 a b
## 10 9 4 28 b <NA>
## 11 9 6 51 a <NA>
## 12 9 9 66 b <NA>
## 13 9 12 84 <NA> <NA>
## 14 10 BS 0 <NA> <NA>

关于r - 识别纵向数据集中 `letter` 内的最后一个 `ID`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15666663/

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