gpt4 book ai didi

r - 值之间的字符串值的计数

转载 作者:行者123 更新时间:2023-12-02 19:12:22 26 4
gpt4 key购买 nike

我有一个简单的数据框,它是一组 ID 列和 0 或 1 的值,例如:

data.frame(replicate(10,sample(0:1,1000,rep=TRUE)))

X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1 1 1 0 1 0 0 1 1 1 0
2 0 0 0 1 0 1 0 0 1 0
3 0 1 1 1 1 0 1 1 1 1
4 0 0 0 1 1 1 1 1 1 0
5 1 0 1 0 1 1 0 1 1 0
6 0 1 1 1 1 1 0 1 1 1

我想编写一个代码或循环,为每一列计算 0 的数量,直到遇到另一个 1,然后继续沿列向下。因此,理想情况下,输出是具有相同 ID 列头和计数列表的新数据框:

  X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1 3 1 2 1 2 1 1 1 NA 2
2 1 2 1 1 NA 1 2 NA NA 2


我不知道如何做到这一点,而且行结果可能有不同的长度。如果每一列都必须创建一个新的数据框,那就没问题了。

最佳答案

这是一个基本的 R 解决方案。我使用了尺寸为 10 的示例,而不是尺寸为 1000 的示例,因此我们可以实际看到发生了什么并确保它看起来正确。

set.seed(47)
d = data.frame(replicate(10,sample(0:1,10,rep=TRUE)))
d
# X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
# 1 0 0 0 0 0 0 1 1 0 0
# 2 0 1 0 1 0 0 0 0 0 0
# 3 1 1 1 0 1 0 0 0 1 0
# 4 0 0 0 0 0 1 1 1 1 1
# 5 1 1 0 1 0 0 1 1 1 0
# 6 0 1 1 1 1 1 1 1 0 1
# 7 1 1 0 0 1 0 0 1 1 0
# 8 0 0 1 0 1 0 1 0 0 0
# 9 0 0 0 1 1 1 0 0 1 1
# 10 1 1 1 0 1 0 1 1 0 0

results = lapply(d, function(x) with(rle(x), lengths[values == 0]))
max_length = max(lengths(results))
results = lapply(results, function(x) {length(x) = max_length; x})
results = do.call(cbind, results)
results
# X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
# [1,] 2 1 2 1 2 3 2 2 2 3
# [2,] 1 1 2 2 2 1 1 2 1 1
# [3,] 1 2 1 2 NA 2 1 NA 1 2
# [4,] 2 NA 1 1 NA 1 NA NA 1 1

关于r - 值之间的字符串值的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64064905/

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