1750 3

[问题] 急!如何提取连续几年的数据 [推广有奖]

  • 0关注
  • 0粉丝

本科生

47%

还不是VIP/贵宾

-

威望
0
论坛币
2825 个
通用积分
2.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
829 点
帖子
21
精华
0
在线时间
155 小时
注册时间
2016-5-22
最后登录
2024-5-9

楼主
如今新史上8 学生认证  发表于 2019-3-11 21:09:22 |AI写论文
30论坛币
ID    YEAR     NAME   a     b      c
如上,假如有六列数据,ID对于每个name来说是唯一的,但可能重复多次,类似于体检数据,一个人对应一个身份证号,但可能体检多次,现在想提取满足体检了任意连续五年的所有数据,用R 该如何完成?求解答

沙发
如今新史上8 学生认证  发表于 2019-3-11 22:44:01
数据如下,在这个例子下,最终只选取ID=3的人的2008-2012年的数据
ID  YEAR NAME   a
1    2005  李       6
2    2005  鲁       4
2    2006  鲁       4
2    2008  鲁       4
2    2009  鲁       4
2    2010  鲁       4
2    2011  鲁       4
3    2005  刘       4
3    2006  刘       4
3    2008  刘       4
3    2009  刘       4
3    2010  刘       4
3    2011  刘       4
3    2012  刘       4

藤椅
如今新史上8 学生认证  发表于 2019-3-12 08:28:15
以下是code和所用的sample数据,还是有一点不足,是我不太会自己自定义函数然后和tapply结合起来,所以没有按照newid分组,对每个人的检查次数分别计算,而是直接对整个数据进行检查,请大神解答一下,最好应该是如何实现,谢谢~
  1. ### Input variables ###
  2. ### database=the name of database
  3. ###del NA
  4. ###del <5 times
  5. ###del discontinuous data
  6. library(dplyr)
  7. database<-read.csv('C:/sample1.csv')
  8. databse1<-database[!is.na(database$newid),]
  9. db2 <- databse1 %>%group_by(newid) %>%mutate (dup = if (n() >=5) 1 else 0)
  10. db3<-db2[db2$dup==1,]
  11. db3$sec<-NA
  12. i=1
  13. while((sum(db3$YEARCHECK[i:(i+4)])/5−db3$YEAR_CHECK[i:(i+4)])/5-db3$YEAR_CHECK[i+2])!=0) {if(is.na(db3$YEAR_CHECK[i+5])) break else (i=i+1) }
  14. db3$sec[i:(i+4)]=rep(1,times=5)
  15. db4<-db3[db3$sec==1,]
复制代码

板凳
陈梦姣 发表于 2020-5-4 16:31:48 来自手机
在吗?我想用家庭微观数据分析房价与家庭负债和消费,怎样提取连续几年接受调查的家庭

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 20:06