gpt4 book ai didi

r - 计算 R 中数据帧的每一行中特定值的连续出现次数

转载 作者:行者123 更新时间:2023-12-01 12:34:51 26 4
gpt4 key购买 nike

我有一个 data.frame 包含许多位置(这么多行)的变量的每月值,我想计算连续月份(即连续单元格)的数量零值。如果只是从左到右阅读,这会很容易,但更复杂的是,年末与年初是连续的。

例如,在下面缩短的示例数据集中(有季节而不是月份),位置 1 有 3 个“0”月份,位置 2 有 2 个,而 3 没有。

df<-cbind(location= c(1,2,3),
Winter=c(0,0,3),
Spring=c(0,2,4),
Summer=c(0,2,7),
Autumn=c(3,0,4))

如何计算这些连续的零值?我已经查看了 rle,但目前我仍然一无所知!

非常感谢您的帮助:)

最佳答案

您已经确定了最长运行可能采取的两种情况:(1) 中间某处或 (2) 在每一行的结尾和开头之间拆分。因此,您想计算每个条件并像这样取最大值:

df<-cbind(
Winter=c(0,0,3),
Spring=c(0,2,4),
Summer=c(0,2,7),
Autumn=c(3,0,4))

#> Winter Spring Summer Autumn
#> [1,] 0 0 0 3
#> [2,] 0 2 2 0
#> [3,] 3 4 7 4


# calculate the number of consecutive zeros at the start and end
startZeros <- apply(df,1,function(x)which.min(x==0)-1)
#> [1] 3 1 0
endZeros <- apply(df,1,function(x)which.min(rev(x==0))-1)
#> [1] 0 1 0

# calculate the longest run of zeros
longestRun <- apply(df,1,function(x){
y = rle(x);
max(y$lengths[y$values==0],0)}))
#> [1] 3 1 0

# take the max of the two values
pmax(longestRun,startZeros +endZeros )
#> [1] 3 2 0

当然,一个更简单的解决方案是:

longestRun  <-  apply(cbind(df,df),# tricky way to wrap the zeros from the start to the end
1,# the margin over which to apply the summary function
function(x){# the summary function
y = rle(x);
max(y$lengths[y$values==0],
0)#include zero incase there are no zeros in y$values
})

请注意,上述解决方案有效,因为我的 df 不包含 location 字段(列)。

关于r - 计算 R 中数据帧的每一行中特定值的连续出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30626222/

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