gpt4 book ai didi

r - 随时间变化的条件计数?

转载 作者:行者123 更新时间:2023-12-01 08:18:46 25 4
gpt4 key购买 nike

我想计算二元因子变量的变化次数。对于每个用户 ID,此变量可以不时地来回更改多次。现在我想计算给定时间跨度内每个用户 ID 对该变量的更改次数。

数据按 id,year,month,myfactor 排序。我在 MySQL 中尝试过这个,但到目前为止没有成功。
有没有一种简单的方法可以在 R 中做到这一点?我想在我的 data.frame 中添加另一列并逐步添加条件......也许是一些 %in% 的东西?

提前感谢您的建议...

嗯,当然......这是一些例子 - 很抱歉没有立即提供它,我的头很痛;):

   myf   Year    month userid   
1 A 2005 1 260
2 B 2005 2 260
3 B 2005 4 260
4 A 2005 5 260
5 B 2005 6 260
6 B 2005 1 261

如果这是我的数据集,我想更新更改列,计算每个用户对 myf 的更改次数。基本上id喜欢结束:
  user  changes
260 3
260 0

等等……

HTH

最佳答案

另一个编辑:

鉴于您对其他解决方案的回应,您可以在一行中得到您想要的:

Data$extra <- ave(as.integer(Data$myf),Data$id,FUN=function(x) sum(diff(x)!=0))

在这种情况下不需要合并。

“在给定的时间跨度内”意味着您可以选择一个时间跨度,然后应用该功能。约书亚的回答是最快的方法。有一个更通用的函数可以为您提供有关运行长度和值的更多信息, rle .一定要检查一下。

根据 Joshuas 的回答,此示例向您展示了如何轻松使用日期来选择给定的时间跨度。

编辑:我更新了答案,向您展示如何轻松地将年份和月份的列转换为日期。您还应该使用 as.numeric当将整个事情应用于像您这样的因素时。
#Testdata
set.seed(21)
Data <- data.frame(id=rep(letters[1:3],each=24),
year= rep(rep(c(2005,2006),each=12),6),
month=rep(1:12,6),
myf=sample(c("A","B"),24*3,TRUE))

#transformation
Data$dates <- as.Date(paste(Data$year,Data$month,"1",sep="-"))
#function

cond.count <- function(from,to,data){
x <- data[data$dates>from & data$dates<to,]
tapply(as.numeric(x$myf),x$id,function(y)sum(diff(y)!=0))
}

#example
from <- as.Date("2005-01-01")
to <- as.Date("2006-04-15")

cond.count(from,to,Data)

关于r - 随时间变化的条件计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4015256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com