데이터:
DB <- data.frame(orderID = c(1,2,3,4,5,6,7,8,9,10),
orderDate = c("1.1.14","16.3.14","11.5.14","21.6.14","29.7.14",
"2.8.14","21.9.14","4.10.14","30.11.14","2.1.15"),
itemID = c(2,3,2,5,12,4,2,3,1,5),
price = c(29.90, 39.90, 29.90, 19.90, 49.90, 9.90, 29.90, 39.90,
14.90, 19.90),
customerID = c(1, 2, 3, 1, 1, 3, 2, 2, 1, 1),
dateofbirth = c("12.1.67","14.10.82","6.8.87","12.1.67","12.1.67",
"6.8.87","14.10.82","14.10.82","12.1.67","12.1.67")
예상 결과 [일수를 정확히 세 었으면 좋겠다] :
1.daystilllastorder(here 18.02.2015) = c("47", "137", "200", "47",
"47", "200", "137", "137", "47", "47")
2.daysbetweenthelastorders = c("33", "13","83","33", "33", "83", "13", "13", "33", "33",)
안녕하세요 여러분,
안타깝게도 저 혼자 해결할 수없는 3 가지 새로운 문제가 있습니다. 다시 한번 도와 주시면 매우 기쁩니다. 데이터 세트에서 모든 주문에는 고유 한 ID가 있고 등록 된 모든 사용자는 고유 한 customerID를 가지고 있습니다. 모든 고객은 특정 가격이있는 항목 (ItemID 포함)을 주문할 수 있습니다. 사용자의 생년월일이 데이터 뱅크에 기록되어 있습니다 (위에서 볼 수 있듯이 : D) I want 1. (모든 고객의) 마지막 주문부터 오늘까지의 일수를 세십시오. 2. 실제 (최신) 주문과 2. 최신 주문 사이의 일수를 세십시오. 3. 주문 사이의 일수를 합계로 반올림하십시오.
이미 이렇게 시도했지만 작동하지 않습니다.
setDT(DB)[, orderDate := as.Date(orderDate, format = "%Y-%m-%d")]
DB[, daystilllastorder := sum(seq[max(orderDate),Sys.Date(), by = customerID]
DB$orderDate <- as.factor(DB$orderDate)
내게 무엇이 잘못되었는지 보여 주거나 문제를 해결할 수있는 또 다른 가능성을 보여줄 수 있기를 바랍니다 ....
건배와 THX!
가능한 해결책은 다음과 같습니다 (3 점을 정확히 이해했는지 모르겠지만 주문 간의 평균 차이를 원하는 것 같습니까?)
먼저 orderDate
실제 날짜 클래스 로 변환 한 다음 모든 것이 간단합니다.
setDT(DB)[, orderDate := as.Date(orderDate, "%d.%m.%y")]
DB[, `:=`(
daystillastord = Sys.Date() - max(orderDate),
daysbetlastord = if(.N == 1L) "first order" else as.character(max(orderDate) - max(orderDate[orderDate != max(orderDate)])),
meandiff = mean(diff(orderDate)),
OrdsLastFullYear = sum(year(orderDate) == year(Sys.Date()) - 1)
),
by = customerID][]
# orderID orderDate itemID price customerID dateofbirth daystillastord daysbetlastord meandiff OrdsLastFullYear
# 1: 1 2014-01-01 2 29.9 1 12.1.67 52 days 33 91.5 4
# 2: 2 2014-03-16 3 39.9 2 14.10.82 142 days 13 101.0 3
# 3: 3 2014-05-11 2 29.9 3 6.8.87 205 days 83 83.0 2
# 4: 4 2014-06-21 5 19.9 1 12.1.67 52 days 33 91.5 4
# 5: 5 2014-07-29 12 49.9 1 12.1.67 52 days 33 91.5 4
# 6: 6 2014-08-02 4 9.9 3 6.8.87 205 days 83 83.0 2
# 7: 7 2014-09-21 2 29.9 2 14.10.82 142 days 13 101.0 3
# 8: 8 2014-10-04 3 39.9 2 14.10.82 142 days 13 101.0 3
# 9: 9 2014-11-30 1 14.9 1 12.1.67 52 days 33 91.5 4
# 10: 10 2015-01-02 5 19.9 1 12.1.67 52 days 33 91.5 4
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다