根据另一列

时间:2015-04-27 01:26:44

标签: r

我的数据

Fruits <- c("Orange","Orange","Pineapple","Pineapple","Orange","Orange","Blueberry")
Location <- c(10, 11, 15, 16, 10, 11, 30)

我的问题

我希望添加一个新列Entry,其中包含与上面一行Fruit发生更改时不同的ID。

我想要的例子

Fruits <- c("Orange","Orange","Pineapple","Pineapple","Orange","Orange","Blueberry")
Location <- c(10, 11, 15, 16, 10, 11, 30)
Entry <- c(1, 1, 2, 2, 3, 3, 4)

请注意"Orange"的第二个条目如何获得与第一个条目不同的ID,即使它是在同一个Location添加的。我的想法是编写一个循环,迭代Fruits以进行文本更改,并在Entry中放置一个值。 Entry中的所有值都必须是连续的。这似乎是一个简单的练习,但我被卡住了!

谢谢。

3 个答案:

答案 0 :(得分:2)

这是典型的rle问题,您可以通过展开lengths结果中的rle值来获得所需内容:

> A <- rle(Fruits)
> rep(seq_along(A$lengths), A$lengths)
[1] 1 1 2 2 3 3 4

答案 1 :(得分:0)

table(df$Fruits)

是您想要获得数据集中水果数量的频率分布。如果您想按水果和地点分配,请告诉我们。

答案 2 :(得分:0)

使用@ thelatemail的建议和...... Creating a column in r that auto-increments based on other columns的答案,我使用了以下代码:

indx <- as.character(interaction(Analysis[c(1)]))
Analysis$Entry <- cumsum(c(TRUE,indx[-1]!=indx[-length(indx)]))

其中Analysisdata.frameFruits是第一列。