gpt4 book ai didi

R:使用 RLE 计算跨列的连续相同值

转载 作者:行者123 更新时间:2023-12-04 11:59:50 25 4
gpt4 key购买 nike

我正在使用 R。我有一个数据框,其中包含每个玩家的一行,然后是代表每个月的列和他们获得的分数(下面是随机值的说明性数据)。我想添加一个新列 (Points$ConsecutiveShutouts),其中包含过去 5 个月内指定总分的最长连续连续得分。

Points <- data.frame("Player" = c("Alpha", "Beta", "Charlie", "Delta", "Echo", "Foxtrot", "Gamma"), "MayPts" = c(floor(runif(7, 0, 3))), "JunPts" = c(floor(runif(7, 0, 3))), "JulPts" = c(floor(runif(7, 0, 3))), "AugPts" = c(floor(runif(7, 0, 3))), "SepPts" = c(floor(runif(7, 0, 3))), "OctPts" = c(floor(runif(7, 0, 3))), "NovPts" = c(floor(runif(7, 0, 3))),"DecPts" = c(floor(runif(7, 0, 3))))

Player MayPts JunPts JulPts AugPts SepPts OctPts NovPts DecPts
Alpha 0 0 1 0 2 2 2 0
Beta 1 0 1 1 1 1 1 2
Charlie 1 2 2 0 2 1 1 0
Delta 0 1 1 2 2 2 0 0
Echo 1 1 0 2 1 2 0 1
Foxtrot 1 0 0 0 0 0 2 1
Gamma 2 0 1 1 0 2 0 1

我试过使用 rle(points):

# Establish the start and end months
StartMonth <- which(colnames(Points) == "SepPts")
EndMonth <- which(colnames(Points) == "DecPts")

# Find total of consecutive months with 0 points
Points$ConsecutiveShutOuts <- max(rel(Points[ ,StartMonth:EndMonth] == 0), lengths[!values])

这样做,我最终得到错误“‘X’必须是原子类型的向量”

关于我做错了什么以及如何解决的任何建议?或者其他方法?

提前致谢! [这里是初学者,所以希望我按照正确的方法提问:)]

最佳答案

我也会使用长格式。我会先创建一个这样的函数。

myfun <- function(series,value){
tmp <- rle(series); runs <- tmp$lengths[tmp$values == value]
if (length(runs)==0) return(0)
else return(max(runs))
}

使用 tidyr/dplyr,您可以按照以下步骤进行操作

library(dplyr)
library(tidyr)
Points %>%
gather(months,Pts,MayPts:DecPts) %>%
group_by(Player) %>%
summarise(x=myfun(tail(Pts,5),0))
# Past 5 month, number of consecutive zeros for each player.

当然,如果您愿意,您可以将结果连接到原始的宽格式数据框。

关于R:使用 RLE 计算跨列的连续相同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41948192/

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