【发布时间】:2021-12-09 09:52:16
【问题描述】:
我有一个小程序问题,我似乎无法弄清楚。 我想知道如何以优雅的方式计算从 r 中每组的不同值开始的序列中连续数字的数量
例如,我们有一个包含名称和数字的数据框,并希望找到最小化数据框,每个名称仅保留 1 个条目,另一个中每个名称的连续条目数
names <- c(rep("bob",5), rep("henry",5), rep("maria",5))
goals <- c(1,2,3,5,4, 4,3,4,5,2, 1,2,4,6,5)
input.df <- data.frame(names, goals)
所以从 1 开始,输出数据框将类似于下面的那个,其中“bob”的值为 3,因为他在进球中有 1 到 3 个连续条目,亨利有 0,因为他没有 1或任何有序条目,玛丽亚有 2 个,因为她有从 1 到 2 的条目
names <- c("bob", "henry", "maria")
runs <- c("3", "0", "2")
output.df.from.1 <- data.frame(names, goals)
从 3 开始,bob 和 maria 都会有 0,但 henry 现在应该有 3,因为他有 3、4、5。
names <- c("bob", "henry", "maria")
runs <- c("0", "3", "0")
output.df.from.3 <- data.frame(names, goals)
我确信必须有一个简单的解决方案,但我无法找到任何解决方案,但是我可能正在寻找错误的东西。
有人有什么建议吗?
【问题讨论】:
-
您的
goals列是字符串而不是数字是否有特殊原因?似乎您想将它们计为数字,但是您以制作框架的方式明确地将它们转换为字符串。也许您应该只使用input.df <- data.frame(names, goals)而不是不必要的复杂as.data.frame(cbind(..))方法(这很少必要/有用)? -
henry有一个 1,即使条目是无序的。你的规则有点不清楚,你是说每个名字的第一个目标必须是1并且你只计算每行递增 1 的那些? -
嗨,r2evans,很抱歉不清楚规则,是的,这正是我的意思。这里没有具体原因说明为什么它应该是一个字符串而不是数字我将编辑问题
-
您想要数据帧列表作为最终输出吗?为什么只检查 1 和 3 的连续目标值,而不检查 2、4、5、6 等其他数字?
标签: r numbers sequence data-wrangling find-occurrences