首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在时间序列中,当个体具有不同的长度时,如何对个体的最后观察进行子集

在时间序列中,当个体具有不同的长度时,如何对个体的最后观察进行子集
EN

Stack Overflow用户
提问于 2020-01-16 21:22:39
回答 1查看 165关注 0票数 1

我有这样一个数据框架:

代码语言:javascript
复制
>data
  ID  Location Sex   Time  Var1  Var2  Var3  Var4  Var5  Var6
   12     A     M     .1    …      …     …     …     …     … 
   12     A     M     .2    …      …     …     …     …     … 
   12     A     M     .3    …      …     …     …     …     … 
   12     A     M     .4    …      …     …     …     …     …
   12     A     M     .5    …      …     …     …     …     … 
   12     A     M     .6    …      …     …     …     …     … 
   234    A     M     .1    …      …     …     …     …     … 
   234    A     M     .2    …      …     …     …     …     … 
   234    A     M     .3    …      …     …     …     …     … 
   234    A     M     .4    …      …     …     …     …     … 
   234    A     M     .5    …      …     …     …     …     …  

有几百个人,每个人都有一个唯一的ID号。每个人的数据都是时间序列数据。在实际数据中,每个人有几百个测量值。例如,在上面的例子中,对于个人12只有6个观察,对于个人234只有5个观察。实际上,个人12可以有980个观察,个人234可以有1249个观察。

我可以为每个人创建一个包含第一行(第一次观察)的数据框架,如下所示:

代码语言:javascript
复制
library(tidyverse)
FirstPt<-
data%>%
group_by(ID)%>%
slice(1)

然后,我可以使用pivot_longer()重新排列数据,就像我需要的那样:

代码语言:javascript
复制
FirstPt<-
FirstPt%>%
pivot_longer(MgCa:PbCa, names_to = "Variable")

我想对每个人的最后一个观察做同样的事情,但是当他们都有不同的长度时,我该如何做呢?

此外,我如何将'pivot_longer()‘命令合并到FirstPt<-data%>%group_by(ID)%>%slice(1)中,以便在一个块中完成所有操作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-16 21:23:52

对于最后一个观察,我们可以使用n()而不是1

代码语言:javascript
复制
library(dplyr)
library(tidyr)
data %>%
  group_by(ID)%>%
  slice(n()) %>%
  pivot_longer(cols =  MgCa:PbCa, names_to = "Variable")

或使用filter

代码语言:javascript
复制
data %>%
  group_by(ID) %>%
  filter(row_number() == n())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59777997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档