iT邦幫忙

1

R語言 rank公式

大家好:
目標是抓出每個ID在不同門市的第一次點餐時間(客人進場多久會點餐)
我的想法是依照店名與ID去分類,再找出最小的時間差,但是最小時間差(rank那段)跑不出來,想請教一下原因,或是有其他寫法可以完成這個題目。謝謝~

yaa <- y %>%
mutate(幾分鐘=difftime(點餐時間,進場時間,units = c("min")))%>%
group_by(店名,ID) %>%
rank(幾分鐘,na.last = TRUE, ties.method=c("min"))
Error in base::"rank"(x, ...) : unused argument (幾分鐘)

https://ithelp.ithome.com.tw/upload/images/20190718/20116986uxDPsGDg4R.png

mutate(幾分鐘,幾分鐘=difftime(點餐時間,進場時間,units = c("min")))%>%
改成這樣呢

1 個回答

0
marlin12
iT邦新手 2 級 ‧ 2019-07-18 12:55:58
最佳解答

rank只可以對一維度的向量(vector)進行排序。

如果要對資料框架(data frame)進行排序,可以用arrange:

yaa <- y %>%
  mutate( 幾分鐘 = difftime( 點餐時間, 進場時間, units = c("min") ) ) %>%
  arrange( 店名, ID, 幾分鐘 )

如果只是要根據店名與ID分類,找出最小的時間差,可以在group_by之後,用distinct:

yaa <- y %>%
  mutate( 幾分鐘 = difftime( 點餐時間, 進場時間, units = c("min") ) ) %>%
  group_by( 店名, ID ) %>%
  distinct( 店名, ID, min(幾分鐘) ) 

非常感謝,已經透過您的方法成功了。
另外我發現也可以
yaa <- y %>%
mutate( 幾分鐘 = difftime( 點餐時間, 進場時間, units = c("min") ) ) %>%
group_by( 店名, ID ) %>%
mutate(my_ranks = order(幾分鐘, decreasing=TRUE)) %>%
subset(my_ranks==1)
只是比較囉嗦一點~

marlin12 iT邦新手 2 級 ‧ 2019-07-18 20:07:55 檢舉

你的方法只多出這一行,算不上囉嗦。
如果不大影響運算結果和速度,甚麽方法也可以。

我要發表回答

立即登入回答