R中有序发生的计算

R中有序发生的计算,r,R,我有一个数据集,其中包括: 客人id客人 入住日期 100个其他变量我宁愿保持不变 我一直在计算客人在以下酒店的总入住次数: 数据对于plyr,我们可以使用顺时针而不是长度 还是和rowid在一起 数据 使用plyr,我们可以使用顺时针而不是长度 还是和rowid在一起 数据 看看函数: 看看函数: 我们可以使用“匹配”和“唯一”来计算入住次数 另一种方法是将因子转换为整数 data %>% group_by(guest) %>% mutate(stays = as.intege

我有一个数据集,其中包括:

客人id客人 入住日期 100个其他变量我宁愿保持不变 我一直在计算客人在以下酒店的总入住次数:

数据对于plyr,我们可以使用顺时针而不是长度

还是和rowid在一起

数据 使用plyr,我们可以使用顺时针而不是长度

还是和rowid在一起

数据 看看函数:

看看函数:

我们可以使用“匹配”和“唯一”来计算入住次数

另一种方法是将因子转换为整数

data %>% group_by(guest) %>% mutate(stays = as.integer(factor(checkInDate)))
基准R:

data$stays <- with(data, ave(checkInDate, guest, FUN = function(x) 
                             as.integer(factor(x))))
我们可以使用“匹配”和“唯一”来计算入住次数

另一种方法是将因子转换为整数

data %>% group_by(guest) %>% mutate(stays = as.integer(factor(checkInDate)))
基准R:

data$stays <- with(data, ave(checkInDate, guest, FUN = function(x) 
                             as.integer(factor(x))))

@我加了一句this@akrun我已经添加了这个我应该添加的是,数据目前没有按任何东西排序,所以我不确定方法1或2是否有效。对于rowid方法,我在as.IDatecheckInDate中得到错误:尽管数据$checkInDate是一个东西,但找不到对象“checkInDate”。@Adam是的,这就是我将行号与as.DatecheckInDate一起使用的原因order@Adam抱歉,错误是因为我忘记添加setDT以转换为data.table。Updated@Adam更新了plyr方法。此外,我还应该补充一点,数据目前没有按任何方式排序,所以我不确定方法一或两是否有效。对于rowid方法,我在as.IDatecheckInDate中得到错误:尽管数据$checkInDate是一个东西,但找不到对象“checkInDate”。@Adam是的,这就是我将行号与as.DatecheckInDate一起使用的原因order@Adam抱歉,错误是因为我忘记添加setDT以转换为data.table。Updated@Adam更新了plyr方法。也
data <- structure(list(checkInDate = c("2020-02-01", "2020-03-01", "2020-04-01", 
"2020-02-01", "2020-03-01", "2020-02-01", "2019-02-01"), guest = c("longstring1", 
"longstring1", "longstring1", "longstring2", "longstring2", "longstring3", 
"longstring4")), row.names = c(NA, -7L), class = "data.frame")
library(plyr)

data <- data.frame(
  guest = sample(1:10, 100, replace = T)
)

ddply(data, .(guest), transform, Stays = order(guest))
library(dplyr)

data %>% 
   group_by(guest) %>% 
   mutate(stays = match(checkInDate, unique(checkInDate)))

#  checkInDate guest       stays
#  <chr>       <chr>       <int>
#1 2020-02-01  longstring1     1
#2 2020-03-01  longstring1     2
#3 2020-04-01  longstring1     3
#4 2020-02-01  longstring2     1
#5 2020-03-01  longstring2     2
#6 2020-02-01  longstring3     1
#7 2019-02-01  longstring4     1
data$stays <- with(data, ave(checkInDate, guest, FUN = function(x) 
                             match(x, unique(x))))
library(data.table)
setDT(data)[, stays := match(checkInDate, unique(checkInDate)), guest]
data %>% group_by(guest) %>% mutate(stays = as.integer(factor(checkInDate)))
data$stays <- with(data, ave(checkInDate, guest, FUN = function(x) 
                             as.integer(factor(x))))
setDT(data)[, stays := as.integer(factor(checkInDate)), guest]