【发布时间】:2021-01-04 21:47:06
【问题描述】:
我对 R 比较陌生,所以我意识到这种类型的问题经常被问到,但我已经阅读了很多堆栈溢出帖子,但仍然无法对我的数据进行处理。
我在导入到 R 的两个数据集中有关于 spss 的数据。我的两个数据集都包含一个 id (IDC),我一直用它来合并它们。在合并之前,我需要过滤其中一个数据集以专门选择日期变量的最后一次观察。
我的数据集 d1 有一个长格式的纵向测量。每个 IDC 有多行,代表不同的居住地(社区)。每行都有自己的“start_date”,这是一个不一定唯一的变量。
正如它在 spss 上的样子:
| IDC | neighborhood | start_date |
|---|---|---|
| 1 | 22 | 08.07.2001 |
| 1 | 44 | 04.02.2005 |
| 1 | 13 | 21.06.2010 |
| 2 | 44 | 24.12.2014 |
| 2 | 3 | 06.03.2002 |
| 3 | 22 | 04.01.2006 |
| 4 | 13 | 08.07.2001 |
| 4 | 2 | 15.06.2011 |
在 R 中,开始日期看起来不一样,而是一个长数字,例如“13529462400”。我不明白这种格式,但我认为它仍然会保留日期顺序......
到目前为止,这是我选择最后日期的所有尝试。所有尝试都运行了,没有错误。输出只是没有给我想要的。在我看来,这些都没有改变 IDC 的重复次数,所以它们都没有真正选择 *only last date。
##### attempt 1 --- not working
d1$start_date_filt <- d1$start_date
d1[order(d1$IDC,d1$start_date_filt),] # Sort by ID and week
d1[!duplicated(d1$IDC, fromLast=T),] # Keep last observation per ID)
###### attempt 2--- not working
myid.uni <- unique(d1$IDC)
a<-length(myid.uni)
last <- c()
for (i in 1:a) {
temp<-subset(d1, IDC==myid.uni[i])
if (dim(temp)[1] > 1) {
last.temp<-temp[dim(temp)[1],]
}
else {
last.temp<-temp
}
last<-rbind(last, last.temp)
}
last
##### atempt 3 -- doesn't work
do.call("rbind",
by(d1,INDICES = d1$IDC,
FUN=function(DF)
DF[which.max(DF$start_date),]))
#### attempt 4 -- doesnt work
library(plyr)
ddply(d1,.(IDC), function(X)
X[which.max(X$start_date),])
### merger code -- in case something has to change with that after only the last start_date is selected
merge(d1,d2, IDC)
我的目标数据集 d1 如下所示:
| IDC | neighborhood | start_date |
|---|---|---|
| 1 | 13 | 21.06.2010 |
| 2 | 44 | 24.12.2014 |
| 3 | 22 | 04.01.2006 |
| 4 | 2 | 15.06.2011 |
感谢您的帮助,非常感谢
【问题讨论】: