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