r - R:在数据框中按组替换数据
问题描述
我有一个这种风格的数据集:
id1 id2 start_line end_line content
A B 1 1 "aaaa"
A B 4 4 "aa mm"
A B 5 5 "boool"
A B 6 6 "omw"
C D 6 6 "hear!"
C D 7 7 " me out!"
C D 21 21 "hello"
我需要根据特定的标准对其进行多次变异。特别是具有相同id1
、相同id2
和连续的行start_line
:
start_line
需要更改为组中的第一个- 该
end_line
值需要更改为最后一行 - 一个新的列
real_line
需要有原来的start_line
- 具有由, , ,
cid
组计算的数字 ID的新数字行id1
id2
start_line
end_line
所以,预期的结果是:
id1 id2 start_line end_line content real_line cid
A B 1 1 "aaaa" 1 1
A B 4 6 "aa mm" 4 2
A B 4 6 "boool" 5 2
A B 4 6 "omw" 6 2
C D 6 7 "hear!" 6 3
C D 6 7 " me out!" 7 3
C D 21 21 "hello" 21 4
我可以real_line
通过简单地复制原始列来添加,但我不知道如何替换start_line
并且end_line
没有总结。
解决方案
我们按 'id1'、'id2' 分组,然后根据
library(dplyr)
df %>%
group_by(id1, id2) %>%
group_by(grp = cumsum(c(TRUE, diff(start_line) != 1)),
.add = TRUE) %>%
mutate(real_line = start_line,
start_line = first(start_line), end_line = last(end_line)) %>%
mutate(cid = cur_group_id()) %>%
ungroup %>%
select(-grp)
-输出
# A tibble: 7 x 7
# id1 id2 start_line end_line content cid real_line
# <chr> <chr> <int> <int> <chr> <int> <int>
#1 A B 1 1 "aaaa" 1 1
#2 A B 4 6 "aa mm" 2 4
#3 A B 4 6 "boool" 2 5
#4 A B 4 6 "omw" 2 6
#5 C D 6 7 "hear!" 3 6
#6 C D 6 7 " me out!" 3 7
#7 C D 21 21 "hello" 4 21
推荐阅读
- react-router-v4 - 如何使用 react-router v4 制作响应式主细节布局,如“哲学”中所述
- c# - C# 在文本框中显示变量
- javascript - 禁用物化轮播上的拖动和/或过渡
- c# - iTextsharp - 将单选按钮图像添加到 .pdf
- java - 取消装甲渲染器 1.7.10 Minecraft
- mongodb - mongodb 聚合 $out E11000 重复键错误索引
- django - 在 Django 中存储来自输入的数据
- python - 使用 Flask 发送和接收图像
- r - 拆分 cols,绑定 dfs 并保留大多数重复值
- azure - Azure DTU 定价结构