r - 为后续访问创建假人
问题描述
我有一个带有 id 和时间序列指标 (prd) 的简单数据结构。我想为后续就诊“fup”创建一个虚拟变量,如果患者没有更多就诊,则等于 0,如果患者将来有更多就诊,则等于 1。
我该怎么做呢?
id<- c(1, 1, 1, 2, 3, 3)
prd <- c(1, 2, 3, 1, 1, 2)
df <- data.frame(id=id, prd=prd)
期望的输出:
id prd fup
1 1 1 1
2 1 2 1
3 1 3 0
4 2 1 0
5 3 1 1
6 3 2 0
解决方案
我们可以检查当前行是否是每个组中的最后一行。在基础 R 中,
df$fup <- with(df, ave(prd, id, FUN = function(x) seq_along(x) != length(x)))
df
# id prd fup
#1 1 1 1
#2 1 2 1
#3 1 3 0
#4 2 1 0
#5 3 1 1
#6 3 2 0
同样在dplyr
,
library(dplyr)
df %>% group_by(id) %>% mutate(fup = +(row_number() != n()))
和data.table
library(data.table)
setDT(df)[, fup := +(seq_along(prd) != .N), by = id]
推荐阅读
- python - Flask 中的 count() 与 count = count + 1
- swift - 在 macOS 上使用 swiftUI 实现 webkit(并创建网页的预览)
- android - 在recyclerview中删除项目后我的数据返回
- lua - 尝试使用“findFirstChild”错误索引 nil
- javascript - .appendChild 不是 HTMLButtonElement 中的函数。在 DOM 中
- r - 基于 R 中其他列的函数构造数据框列
- visual-studio-code - 如何修复由 CMake 工具在 VSCode 的“.vscode\c_cpp_properties.json”中创建的 Linux 路径?
- azure - 使用 Azure Function 将视频上传到 Blob 存储
- docker - .env 文件没有改变?
- html - 使用 JQuery 根据所选选项对多个列表进行排序