如何从 R 中重复测量的数据集中提取 "final visit" 处的值?
How to extract value at "final visit" from a data set with repeated measurement in R?
假设我有一个重复测量的数据框:
>m
id age diagnosis
1 4 0
1 7 1
1 9 0
2 6 1
4 9 1
4 10 0
诊断不是时不变的。我怎样才能在最后一次访问(最大年龄)时提取诊断结果以获得这样的结果?
id age diagnosis
1 9 0
2 6 1
4 10 0
你可以试试data.table的last()
library(data.table)
as.data.table(df)[, last(.SD), by = id]
# id age diagnosis
# 1: 1 9 0
# 2: 2 6 1
# 3: 4 10 0
或者用 dplyr slice(., n())
library(dplyr)
slice(group_by(df, id), n())
# Source: local data frame [3 x 3]
# Groups: id [3]
#
# id age diagnosis
# (int) (int) (int)
# 1 1 9 0
# 2 2 6 1
# 3 4 10 0
或者使用 base R
中的 duplicated
,我们得到逻辑索引来对行进行子集化。
m[!duplicated(m$id,fromLast=TRUE),]
# id age diagnosis
#3 1 9 0
#4 2 6 1
#6 4 10 0
假设我有一个重复测量的数据框:
>m
id age diagnosis
1 4 0
1 7 1
1 9 0
2 6 1
4 9 1
4 10 0
诊断不是时不变的。我怎样才能在最后一次访问(最大年龄)时提取诊断结果以获得这样的结果?
id age diagnosis
1 9 0
2 6 1
4 10 0
你可以试试data.table的last()
library(data.table)
as.data.table(df)[, last(.SD), by = id]
# id age diagnosis
# 1: 1 9 0
# 2: 2 6 1
# 3: 4 10 0
或者用 dplyr slice(., n())
library(dplyr)
slice(group_by(df, id), n())
# Source: local data frame [3 x 3]
# Groups: id [3]
#
# id age diagnosis
# (int) (int) (int)
# 1 1 9 0
# 2 2 6 1
# 3 4 10 0
或者使用 base R
中的 duplicated
,我们得到逻辑索引来对行进行子集化。
m[!duplicated(m$id,fromLast=TRUE),]
# id age diagnosis
#3 1 9 0
#4 2 6 1
#6 4 10 0