假设我有数据
item cond foo
1 1 3.733333
2 1 4.766667
3 1 4.133333
4 2 4.466667
5 2 2.800000
6 2 2.300000
我需要生成一个新列,该列唯一标识item
每cond
个值,因此我想:
item cond foo item_per_cond
1 1 3.733333 1
2 1 4.766667 2
3 1 4.133333 3
4 2 4.466667 1
5 2 2.800000 2
6 2 2.300000 3
我认为我会选择这样的东西,但我不知道...
应该在这里做什么?
ddply(d, .(cond), transform, ...)
答案 0 :(得分:2)
解决方案是使用seq_along
列名:
ddply(d, .(cond), transform, item_per_cond = seq_along(item)
答案 1 :(得分:1)
由于您对plyr
解决方案特别感兴趣,因此您可能需要考虑Hadley Wickham的新dplyr
包:
library(dplyr)
df <- df %>% group_by(cond) %>% mutate(item_per_cond = seq_along(item))
得出以下结果:
item cond foo item_per_cond
1 1 1 3.733333 1
2 2 1 4.766667 2
3 3 1 4.133333 3
4 4 2 4.466667 1
5 5 2 2.800000 2
6 6 2 2.300000 3
答案 2 :(得分:1)
这是一种dplyr方法。
item <- c(1,1,2,3,5,1,2,2,2,5)
cond <- rep(c(1,2), each = 5)
value <- runif(10, 10, 20)
foo <- data.frame(item, cond, value, stringsAsFactors = F)
foo %>%
group_by(cond) %>%
mutate(index = dense_rank(item))
item cond value index
1 1 1 11.66528 1
2 1 1 18.22134 1
3 2 1 18.17833 2
4 3 1 16.58589 3
5 5 1 14.75184 4
6 1 2 11.65522 1
7 2 2 12.74313 2
8 2 2 17.17077 2
9 2 2 11.37193 2
10 5 2 12.43162 3