r - 如何检查数字是否仅在一组中增加?
问题描述
我想检查组(ID)中的“状态”列,看看数字是否只会增加。
例子:
df <-data.frame("ID" = c("A","A","A","B","B","B"),
"State"=c(1,2,3,1,4,2))
df %>%
group_by(ID) %>%
mutate(Check = ifelse(State > State[row.number() + 1], TRUE, FALSE)))
和我希望的输出:检查:A - TRUE B - FALSE(因为在这个例子中 1,4,2 数字增加但随后减少)
解决方案
编辑:检查 Yuriy 的答案以查看更紧凑的解决方案,如果您一开始不了解diff
和all
发挥作用,可能更难阅读
代码
require(tidyverse)
(
df
%>% group_by(ID)
%>% mutate(Diff = State - lag(State))
%>% filter(! is.na(Diff))
%>% summarise(Increasing = all(Diff >= 0))
)
输出
# A tibble: 2 x 2
ID Increasing
<chr> <lgl>
1 A TRUE
2 B FALSE
解释
(
df
%>% group_by(ID)
%>% mutate(Diff = State - lag(State))
)
ID State Diff
<chr> <dbl> <dbl>
1 A 1 NA
2 A 2 1
3 A 3 1
5 B 1 NA
6 B 4 3
7 B 2 -2
在每个子组中计算与上线的差异
(
df
%>% group_by(ID)
%>% mutate(Diff = State - lag(State))
%>% filter(! is.na(Diff))
%>% summarise( all(Diff >= 0))
)
这些NA
行被删除,然后我们必须检查是否存在负数。
数据样本
require(tidyverse)
df <- tribble( ~ ID, ~ State,
"A", 1,
"A", 2,
"A", 3,
"B", 1,
"B", 4,
"B", 2
)
推荐阅读
- javascript - 当我使用 passport-auth0-openidconnect 时,为什么 ensureLogin 不起作用?
- go - 在结构中使用通用切片字段
- excel - 在 word 中运行 VBA 宏以点击下一个记录按钮
- node.js - 从nodeJS文件(使用mongoose从mongodb获取)打印数据到ejs页面
- node.js - 在 Kubernetes 集群上部署的 Nodejs 应用程序上的 502 Bad gateway
- javascript - 反应轮播预览
- autodesk-forge - 如何使用所有 AutoCAD DLL 在设计自动化中使用 accoreconsole.exe 加载自定义 .net dll
- visual-studio-code - VScode C调试问题,找不到对应的c文件
- r - 如何在 R 中增加或减少 MODIS 栅格的分辨率?
- javascript - 在带有 BrowserRouter 的 React JS 中使用字符串列表作为路径创建动态路由