首页 > 解决方案 > 将 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”。

如果有更简单/更有效的方式来完成我的任务,请告诉我!

非常感谢!

标签: r

解决方案


我们可以做

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))

推荐阅读