【问题标题】:Updating column value and deleting row in R更新列值并删除R中的行
【发布时间】:2017-07-03 11:51:39
【问题描述】:

我正在读取 csv 文件并尝试根据条件更新名为“已添加”的列的值,当两个连续行的 bug_id 和 bug_when 相同并且第 i 行的添加列具有值“已解决”,然后添加列的值在 ( i+1) 通过连接“已添加”列(i 和 i + 1 行)的值更新行并删除第 i 行。我累了,但它不能正常工作。该文件包含以下信息:

bug_id  bug_when            field       added
1141327 2015-03-09 16:21:30 Status      RESOLVED
1141327 2015-03-09 16:21:30 Resolution  DUPLICATE
1142623 2015-03-24 18:15:22 Status      RESOLVED
1142623 2015-03-24 18:15:22 Resolution  FIXED
1143179 2015-07-30 09:37:56 Status      RESOLVED
1143179 2015-07-30 09:37:56 Resolution  FIXED

这是我的代码:

dataframe <- read.csv("prototype.csv", header = TRUE)
start <- 1
end <- nrow(dataframe)-1

for(i in start:end)
{
  if(dataframe$bug_id[i]==dataframe$bug_id[i+1] & dataframe$bug_when[i]==dataframe$bug_when[i+1])
  {
    if(dataframe$added[i]=="RESOLVED")
    {
      df <- paste(dataframe$added[i],"-",dataframe$added[i+1])
      dataframe$added[i+1] <- df
      dataframe <- dataframe[!(dataframe[i,])]
    }

  }

}

任何建议将不胜感激。 期望的结果:

bug_id  bug_when            field       added
1141327 2015-03-09 16:21:30 Resolution  RESOLVED-DuPLICATE
1142623 2015-03-24 18:15:22 Resolution  RESOLVED-FIXED
1143179 2015-07-30 09:37:56 Resolution  RESOLVED-FIXED

【问题讨论】:

  • 您可以添加您提供的数据示例的所需结果吗?
  • @PLapointe 所需结果已添加

标签: r


【解决方案1】:

下面是使用dplyr 的方法。基本上,每次添加的 t-1 中有“RESOLVED”时,添加的字符串都会与paste 连接。然后何时使用filter 仅保留具有“分辨率”的字段。

library(dplyr)
df%>%
  group_by(bug_id,bug_when)%>%
  mutate(added=ifelse(lag(added) =="RESOLVED" & !is.na(lag(added)),
                  paste(lag(added),(added),sep="-"),
                  added))%>%
  filter(field=="Resolution")

   bug_id            bug_when      field              added
    <int>               <chr>      <chr>              <chr>
1 1141327 2015-03-09 16:21:30 Resolution RESOLVED-DUPLICATE
2 1142623 2015-03-24 18:15:22 Resolution     RESOLVED-FIXED
3 1143179 2015-07-30 09:37:56 Resolution     RESOLVED-FIXED

数据

df <- read.table(text="bug_id  bug_when            field       added
1141327 '2015-03-09 16:21:30' Status      RESOLVED
1141327 '2015-03-09 16:21:30' Resolution  DUPLICATE
1142623 '2015-03-24 18:15:22' Status      RESOLVED
1142623 '2015-03-24 18:15:22' Resolution  FIXED
1143179 '2015-07-30 09:37:56' Status      RESOLVED
1143179 '2015-07-30 09:37:56' Resolution  FIXED",
                 header=TRUE,stringsAsFactors=FALSE)

【讨论】:

    【解决方案2】:

    我想你想结合聚合和粘贴,像这样:

    df <- read.table(text="bug_id  bug_when            field       added
    1141327 '2015-03-09 16:21:30' Status      RESOLVED
    1141327 '2015-03-09 16:21:30' Resolution  DUPLICATE
    1142623 '2015-03-24 18:15:22' Status      RESOLVED
    1142623 '2015-03-24 18:15:22' Resolution  FIXED
    1143179 '2015-07-30 09:37:56' Status      RESOLVED
    1143179 '2015-07-30 09:37:56' Resolution  FIXED",stringsAsFactors = FALSE,header=TRUE)
    
    df2 <- aggregate(added ~ bug_id + bug_when, df,paste,collapse = "-")
    df2$field <- "Resolution"
    
    #    bug_id            bug_when              added      field
    # 1 1141327 2015-03-09 16:21:30 RESOLVED-DUPLICATE Resolution
    # 2 1142623 2015-03-24 18:15:22     RESOLVED-FIXED Resolution
    # 3 1143179 2015-07-30 09:37:56     RESOLVED-FIXED Resolution
    

    【讨论】:

      猜你喜欢
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多