作者andrew43 (讨厌有好心推文後删文者)
看板R_Language
标题Re: [问题] 如何只留下时间最新的资料!?
时间Fri Nov 13 06:39:00 2015
这是让新手方便的教学文
# 读资料
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
: [关键字]:
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.117.37.172
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1447367943.A.CF4.html
1F:推 spiderway: 感谢~~~~ 11/13 22:59
2F:推 po5113: 感谢!! 11/13 23:14
3F:推 tony255034: 感谢~~~ ORZ 11/16 22:43