r - R基于两列重置计数器
问题描述
我有以下类型的数据,我需要输出作为第二个数据框...
a <- c(1,1,1,1,2,2,2,2,2,2,2)
b <- c(1,1,1,2,3,3,3,3,4,5,6)
d <- c(1,2,3,4,1,2,3,4,5,6,7)
df <- as.data.frame(cbind(a,b,d))
output <- c(1,1,1,2,1,1,1,1,2,3,4)
df_output <- as.data.frame(cbind(df,output))
我已经尝试过 cumsum ,但我无法获得预期的结果。请指导。问候,恩图。
基于列 a 值变化,如果 b 要从一开始重置。
条件是如果 b 具有相同的值,它应该从 1 开始。
就像在第 5 条记录中一样,col b 的值为 3。它应该重置为 1,如果 col b 相同的所有值(如 ro 6,6,7,8 的情况相同,那么它应该是 1 并且任何更改都应增加 1)。
解决方案
我们可以按列“a”进行分组,然后使用“b”中match
的值创建新列unique
library(dplyr)
df2 <- df %>%
group_by(a) %>%
mutate(out = match(b, unique(b)))
df2
# A tibble: 11 x 4
# Groups: a [2]
# a b d out
# <dbl> <dbl> <dbl> <int>
# 1 1 1 1 1
# 2 1 1 2 1
# 3 1 1 3 1
# 4 1 2 4 2
# 5 2 3 1 1
# 6 2 3 2 1
# 7 2 3 3 1
# 8 2 3 4 1
# 9 2 4 5 2
#10 2 5 6 3
#11 2 6 7 4
或者另一种选择是强制factor
变量integer
df %>%
group_by(a) %>%
mutate(out = as.integer(factor(b)))
数据
df <- data.frame(a, b, d)
推荐阅读
- java - 任何数字或 NULL 值的正则表达式
- xml - 如何将 xsl 样式表从一个 xsl 导入或包含到另一个 xsl?
- flutter - 跨不同路线共享集团
- java - 接受用户输入 5 次的 for 循环
- reactjs - 保存时出现 Visual Studio Code 奇怪的格式
- reactjs - 我有一个卡片组件需要更新以添加新项目
- php - 响应:500 内部服务器错误,消息:“未定义偏移量:0”,异常:“ErrorException”(在 Collection.php 中)
- python - 为什么在“While True”循环中使用 continue 时会出现回溯错误
- java - HibernateException:无法使用 spring-data-jpa 本机查询为 postgresql 确定类异常的类型
- java - 如何手动将泛型参数传递给方法