Re: [问题] 如何只留下时间最新的资料!?

楼主: andrew43 (讨厌有好心推文后删文者)   2015-11-13 06:39:00
这是让新手方便的教学文
# 读资料
dat <- read.csv(textConnection("DATE,NAME,VALUE
2015/11/12 8:01,tony,32
2015/11/12 9:02,tony,34
2015/11/12 8:03,sam,32
2015/11/12 9:04,sam,34"),
colClasses=c("character","character","numeric"))
# 把 DATE 转成 POSIXlt 时间日期物件,之后才能对它排序比大小
dat$DATETIME <- strptime(dat$DATE, format = "%Y/%m/%d %H:%M")
# 求以 DATETIME 做递减排序的顺序
reorder <- order(dat$DATETIME, decreasing=T)
# 排序后的 dat
dat[reorder, ]
# 所有资料最新的那一列
dat[reorder[1], ]
# 知道上面的道理后,对 dat 按 NAME 进行处理
dat1 <- by(
dat,
dat$NAME, # 按 dat$NAME 分组处理
function(x){
# 取出各组内按 DATETIME 递减排序后的第一名那列
x[order(x$DATETIME, decreasing=T)[1], ]
}
)
# dat1 是个 list,可以看看 dat1[[1]] 和 dat1$sam 和 dat1$tony 是什么
# 最后 rbind 拼起来
do.call("rbind", dat1)
※ 引述《tony255034 (5245566)》之铭言:
: 文章分类提示:
: - 问题: 当你想要问问题时,请使用这个类别
: [问题类型]:
: 程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
: [软件熟悉度]:
: 新手(没写过程式,R 是我的第一次)
: [问题叙述]:
: 想请问要如何将除了时间最新的资料留下来呢?
: 原始资料
: DATE NAME VALUE
: 2015/11/12 8:00 tony 32
: 2015/11/12 9:00 tony 34
: 2015/11/12 8:00 sam 32
: 2015/11/12 9:00 sam 34
: 过滤后资料
: DATE NAME VALUE
: 2015/11/12 9:00 tony 34
: 2015/11/12 9:00 sam 34
: [程式范例]:
: 尚无,不知如何处理这种资料
: [环境叙述]:
: R3.2.2 Win7 32bit
: [关键字]:
作者: spiderway (spiderway)   2015-11-13 22:59:00
感谢~~~~
作者: po5113 (π)   2015-11-13 23:14:00
感谢!!
作者: tony255034 (5245566)   2015-11-16 22:43:00
感谢~~~ ORZ

Links booklink

Contact Us: admin [ a t ] ucptt.com