2017-02-03 121 views
0

我有具有以下值的數據幀:如何根據R中的其他行值更新行值?

 
Id CreationDate Value ChangeCounter 
1 date1   p01  1 
2 date2   p01  1 
3 date3   p02  2 
4 date4   p02  2 
5 date5   p01  3 
6 date6   p03  4 

這裏「ChangeCounter」是一個新的列需要被添加到數據幀。 Change計數器中的值基本上跟蹤Value列的更改次數。

最終,我試圖在值字段更改時獲取第一行的列表。因此,輸出將是:

輸出:

 
Id CreationDate Value ChangeCounter 
1 date1   p01  1 
3 date3   p02  2 
5 date5   p01  3 
6 date6   p03  4 

大多數我讀的實例運行在列,執行變換和行添加一個新的列值。但我的要求的例子是逃避我。如果還有其他更好的方法來實現最終結果而不計算「ChangeCounter」列,也將給出解決問題的不同觀點。

回答

1

如果你想擁有的,然後發生的Value改變行這可能幫助:

df[c(TRUE, head(df$Value, n = -1) != tail(df$Value, n = -1)), ] 

如果你想要的確切ChangeCounter柱則:

df$ChangeCounter <- cumsum(c(TRUE, head(df$Value, n = -1) != 
            tail(df$Value, n = -1))) 
2

沒有改變計數:

GoodRows = c(1,which(df$Value[-1] != df$Value[-nrow(df)]) +1) 
df[GoodRows,] 
    Id CreationDate Value 
1 1  date1 p01 
3 3  date3 p02 
5 5  date5 p01 
6 6  date6 p03 
+0

謝謝@ G5W,df $ Value [-1]看上一行? – parishodak

+0

df $ Value [-1]刪除第一行。 df $ Value [-nrow(df)]刪除最後一行。所以當你在GoodRows中計算!=時,你正在檢查一行何時不等於之前的行。 – G5W

相關問題