我有这样一个数据框架:
>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个观察。
我可以为每个人创建一个包含第一行(第一次观察)的数据框架,如下所示:
library(tidyverse)
FirstPt<-
data%>%
group_by(ID)%>%
slice(1)然后,我可以使用pivot_longer()重新排列数据,就像我需要的那样:
FirstPt<-
FirstPt%>%
pivot_longer(MgCa:PbCa, names_to = "Variable")我想对每个人的最后一个观察做同样的事情,但是当他们都有不同的长度时,我该如何做呢?
此外,我如何将'pivot_longer()‘命令合并到FirstPt<-data%>%group_by(ID)%>%slice(1)中,以便在一个块中完成所有操作?
发布于 2020-01-16 21:23:52
对于最后一个观察,我们可以使用n()而不是1
library(dplyr)
library(tidyr)
data %>%
group_by(ID)%>%
slice(n()) %>%
pivot_longer(cols = MgCa:PbCa, names_to = "Variable")或使用filter
data %>%
group_by(ID) %>%
filter(row_number() == n())https://stackoverflow.com/questions/59777997
复制相似问题