我有一个数据框,其中包含以下值:
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”列,也会给出一个解决问题的不同观点。
答案 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)))