2017-02-03 79 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

相关问题