如何根据R中的其他行值更新行值?

时间:2017-02-03 22:11:32

标签: r dataframe

我有一个数据框,其中包含以下值:

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”是需要添加到数据框的新列。更改计数器中的值,它基本上跟踪“值”列更改的次数。

最终,每当Value字段发生变化时,我都会尝试获取第一行的列表。因此输出将是:

输出:

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

我读过的大多数示例都在列上运行,进行转换并为行添加新的列值。但我的要求的例子是逃避我。如果没有任何其他更好的方法来实现最终结果而没有计算出“ChangeCounter”列,也会给出一个解决问题的不同观点。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)))