r - 将 1 添加到 R 中数据帧的特定字母数字行
问题描述
我对 R 很陌生,所以非常感谢您的帮助!
这是我当前名为“track_data”的数据框
我要做的是将类下的第 11 行更改为“T43”,将第 12 行更改为“T44”,也尝试对所有组合类执行相同操作,因此:第 13 行更改为“T45”,第 14 行更改为“ T46" 和第 15 行至 "T47"
我尝试做的是找出哪些类是组合类并识别唯一向量:
#Change Class to appropriate names
a <- which(nchar(track_data$Class) > 3)
b <- unique(track_data$Class[a])
#T43/44
for (r in a)
if(track_data$Class[r] == b[1]){
print(paste("Row", r))
for (class in 1:r)
track_data$Class[r] <- substr(track_data$Class[r],1,3)
}
我会重复 b 的其他项目,即“T45-47”和“T53/54”
这给了我:
现在我只需要基本上找到一个重复的行,并对类 +1,但我不断收到错误,因为我还需要添加“T”。
如果有更简单/更有效的方式来完成我的任务,请告诉我!
非常感谢!
解决方案
我们可以做
library(dplyr)
library(purrr)
library(stringr)
track_data %>%
group_by(Class) %>%
mutate(Class2 = if(n() > 1) str_c("T",
unlist(map(str_extract_all(str_remove(first(Class),
"T"), "\\d+"),
~
seq(as.numeric(.x[1]), as.numeric(.x[2]), by = 1)))) else Class) %>%
ungroup %>%
mutate(Class = Class2, Class2 = NULL)
-输出
# A tibble: 8 × 1
Class
<chr>
1 T11
2 T36
3 T42
4 T43
5 T44
6 T45
7 T46
8 T47
数据
track_data <- structure(list(Class = c("T11", "T36", "T42", "T43/44", "T43/44",
"T45-47", "T45-47", "T45-47")), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -8L))
推荐阅读
- mysql - 在 MySQL 5.7.27 上寻找 REGEXP_REPLACE() 替代品
- java - Artemis 休息界面
- python - 如何根据 PyMongo 中的键或子键提取值
- vhdl - VHDL 中的通用时钟分频器
- performance - React Hook“useCallback”和纯组件的问题
- python - Python:如何避免 exec()?
- python - 在 Pandas、Python 中查找具有相同第一列的所有行的最小值、最大值、平均值
- php - 计算帖子的相似度
- android - Android listview 标头忽略其子布局的高度
- powershell - 使用 Power Shell 在远程计算机上打开 .exe