计算数据的唯一天数总数

KT_*_*T_1 2 r dataframe

我正在研究一个显示人们旅行方式的大型数据集.我需要计算人们旅行的独特日数.下表显示了ID,它对每个特定的人都是唯一的.与每个ID相关联的是他们旅行的日期 - 对于某些人来说,这可能是每天一次旅行,对于其他人,每天可能有多次旅行(例如,人"1"在4日进行了两次旅行).我需要做的是选择数据集中所有人的唯一天数总数(例如,人1 = 2,人2 = 3,人3 = 1,人4 = 2 - 因此总使用迷你 - 下面的数据集应为8.

ID = c(1,1,1,2,2,2,2,3,4,4,4,4)
date = c("4th Nov","4th Nov","5th Nov","5th Nov","6th Nov","7th Nov","7th Nov","8th Nov","6th Nov","6th Nov","7th Nov","7th Nov")
data<-data.frame(ID,date)
Run Code Online (Sandbox Code Playgroud)

我们将非常感谢有关R编码的任何建议.

非常感谢.

And*_*rie 5

你应该和plyr包裹交朋友.该ddply功能使得这一点分析非常简单.它需要a data.frame,根据一些标准(在这种情况下为ID)将其拆分,应用一个函数并将这些块组合成一个data.frame:

library(plyr)
ddply(data, .(ID), summarise, days=length(unique(date)))
  ID days
1  1    2
2  2    3
3  3    1
4  4    2
Run Code Online (Sandbox Code Playgroud)

或者使用基数R,使用splitsapply获得具有所需结果的向量:

sapply(with(data, split(date, ID)), function(x)length(unique(x)))
1 2 3 4 
2 3 1 2 
Run Code Online (Sandbox Code Playgroud)


Ric*_*ton 5

也可以tapply从基础 R 开始。

with(data, tapply(date, ID, function(x) length(unique(x))))
Run Code Online (Sandbox Code Playgroud)

作为替代方案,length(unique(x))您可以利用date作为因素的事实并计算水平。

with(data, tapply(date, ID, function(x) nlevels(x[, drop = TRUE])))
Run Code Online (Sandbox Code Playgroud)

奖金想法:

要解决定义名为“date”的变量的问题,请注意,您可以在对 data.frame 的调用中包含向量,如下所示。

data <- data.frame(
  ID = c(1,1,1,2,2,2,2,3,4,4,4,4),
  date = c("4th Nov","4th Nov","5th Nov","5th Nov","6th Nov","7th Nov","7th Nov","8th Nov","6th Nov","6th Nov","7th Nov","7th Nov")
)
Run Code Online (Sandbox Code Playgroud)

当您的字符串包含大量重复内容时,通常最好使用paste. 可以使用更简洁地创建您的日期字符串

paste(c(4, 4, 5, 5, 6, 7, 7, 8, 6, 6, 7, 7), "th Nov", sep = "")
Run Code Online (Sandbox Code Playgroud)

最后,如果您想对日期进行任何类型的分析,您需要以多种日期格式之一存储它们。为此,您最好不要在意“th”,而是将日期保留在计算机易于解析的形式中,例如“dd/mm/yyyy”。然后调用strptime