首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:如何将列中的值与同一列中以后的值进行比较

R:如何将列中的值与同一列中以后的值进行比较
EN

Stack Overflow用户
提问于 2021-12-09 19:23:53
回答 1查看 47关注 0票数 0

我试图使用R中的大型数据集,其中需要创建一个列,该列将现有列中的值与其后面的所有值进行比较(例如:第1行需要比较行1-10,000,行2需要比较行2-10,000,第3行需要比较行3-10,000,等等),但无法确定如何编写范围。

我目前有一列原始数值和一列由以下内容生成的行值:

samples$row = seq.int(nrow(samples))

我尝试使用以下命令生成该列:

samples$processed = min(samples$raw[samples$row:10000])

但是,获取错误“数值表达式有10000个元素:只有第一个使用的元素”,而生成的列只对10,000行中的每一行重复第1行的值。

如何编写此命令,以便范围的下界是当前正在计算的行,而不是1?

任何帮助都将不胜感激,因为我有最少的编程经验。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-09 19:30:00

如果您只需要特定行的min和下面的所有行,那么

代码语言:javascript
复制
rev(cummin(rev(samples$val)))
#  [1]  24  24  24  24  24  24  24  24  24  24  24  24 165 165 165 165 410 410 410 882

如果您有一些没有cum累积变量的其他函数(并且您对min的使用只是占位符),那么其中之一:

代码语言:javascript
复制
mapply(function(a, b) min(samples$val[a:b]), seq.int(nrow(samples)), nrow(samples))
#  [1]  24  24  24  24  24  24  24  24  24  24  24  24 165 165 165 165 410 410 410 882

sapply(seq.int(nrow(samples)), function(a) min(samples$val[a:nrow(samples)]))

使用mapply over sapply的唯一原因是,出于某种原因,您希望使用类似窗口的操作,而不是总是位于帧的底部。(不过,如果您想要windows,我建议您使用zooslider包。)

数据

代码语言:javascript
复制
set.seed(42)
samples <- data.frame(val = sample(1000, size=20))
samples
#    val
# 1  561
# 2  997
# 3  321
# 4  153
# 5   74
# 6  228
# 7  146
# 8  634
# 9   49
# 10 128
# 11 303
# 12  24
# 13 839
# 14 356
# 15 601
# 16 165
# 17 622
# 18 532
# 19 410
# 20 882
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70295594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档