r - 计算小于当前值的值的数量
问题描述
如果值小于当前行,我想计算列输入中的行数(请参阅下面的结果)。对我来说问题是条件基于当前行值,因此它与条件是固定数字的一般情况有很大不同。
data <- data.frame(input = c(1,1,1,1,2,2,3,5,5,5,5,6))
input
1 1
2 1
3 1
4 1
5 2
6 2
7 3
8 5
9 5
10 5
11 5
12 6
我期望得到的结果是这样的。例如,对于观测值 5 和 6(值为 2),有 4 个观测值的值 1 小于它们的值 2。因此count的值为 4。
input count
1 1 0
2 1 0
3 1 0
4 1 0
5 2 4
6 2 4
7 3 6
8 5 7
9 5 7
10 5 7
11 5 7
12 6 11
编辑:当我处理分组数据时dplyr
,我希望得到的最终结果如下所示,也就是说,我希望每个组内的条件都是动态的。
data <- data.frame(id = c(1,1,2,2,2,3,3,4,4,4,4,4),
input = c(1,1,1,1,2,2,3,5,5,5,5,6),
count=c(0,0,0,0,2,0,1,0,0,0,0,4))
id input count
1 1 1 0
2 1 1 0
3 2 1 0
4 2 1 0
5 2 2 2
6 3 2 0
7 3 3 1
8 4 5 0
9 4 5 0
10 4 5 0
11 4 5 0
12 4 6 4
解决方案
这是一个选项tidyverse
library(tidyverse)
data %>%
mutate(count = map_int(input, ~ sum(.x > input)))
# input count
#1 1 0
#2 1 0
#3 1 0
#4 1 0
#5 2 4
#6 2 4
#7 3 6
#8 5 7
#9 5 7
#10 5 7
#11 5 7
#12 6 11
更新
使用更新的数据,在上面的代码中按 'id' 添加组
data %>%
group_by(id) %>%
mutate(count1 = map_int(input, ~ sum(.x > input)))
# A tibble: 12 x 4
# Groups: id [4]
# id input count count1
# <dbl> <dbl> <dbl> <int>
# 1 1 1 0 0
# 2 1 1 0 0
# 3 2 1 0 0
# 4 2 1 0 0
# 5 2 2 2 2
# 6 3 2 0 0
# 7 3 3 1 1
# 8 4 5 0 0
# 9 4 5 0 0
#10 4 5 0 0
#11 4 5 0 0
#12 4 6 4 4
推荐阅读
- python - 客户端 - 使用 python 进行服务器套接字编程
- android - Java 编译器错误:链接文件资源失败
- javascript - ECMAScript:我们在哪里可以找到有关 let/const 变量可访问性的规范
- css - 日历插件不在移动浏览器中显示导航箭头
- video - 如何使用 Tokbox API 在 Dual Monitor 中拆分视频咨询
- c# - 如何检测插入的软盘然后复制文件?
- c# - DataGrid 中的 WPF 切换列可见性触发不需要的事件
- node.js - 如何使用passport google o auth实现我们自己的自定义注册表单?
- sql-server - 从 Azure 弹性数据库作业读取 Oracle 数据库
- javascript - npm 库/框架下载量大幅下降。有谁知道为什么?