我的数据
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
中的所有值都必须是连续的。这似乎是一个简单的练习,但我被卡住了!
谢谢。
答案 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)]))
其中Analysis
是data.frame
,Fruits
是第一列。