2017-07-03 13 views
0

2つの連続する行のbug_idとbug_whenが同じで、i行の追加された列の値が "RESOLVED"の場合、csvファイルを読み込み、条件に基づいて 'added'という列の値を更新しようとしています追加された列(iとi + 1行)を連結し、i番目の行を削除することによって、(i + 1)行の追加列の値が更新されます。私は疲れましたが、正しく機能しませんでした。ファイルには、次の情報が含まれています。ここ列の値を更新してRの行を削除する

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 
+0

あなたが提供されたデータの一例をご希望の結果を追加することはできますか? –

+0

@PLapointe希望の結果が追加されました – user2293224

答えて

0

はここ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) 
0

私はこのように、あなたが集計組み合わせてペーストにしたいと思う:

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 
関連する問題