r - 在数据帧中出现第n个

时间:2015-07-23 10:23:16

标签: r

我有一个包含两列(FirstName和State)的data.frame。

my.df = data.frame(FirstName = c('John', 'Paul', 'John', 'Sarah', 'Haley', 'Paul', 'John'),
                   State = c('VIC', 'NSW', 'VIC', 'QLD', 'TAS', 'NSW', 'VIC'))

FirstName State
   John   VIC
   Paul   NSW
   John   VIC
  Sarah   QLD
  Haley   TAS
   Paul   NSW
   John   VIC

我想包含一个附加列,列出FirstName列中每个值的第n次出现。例如,'John'出现在第1,3和6行中 - 因此新列将在第1行中列出'1',在第3行中列出'2'(因为这是第二次列出'John')和'3 '在第6行(因为这是第三次列出'John')。

我想要的结果如下:

FirstName State Index
   John   VIC     1
   Paul   NSW     1
   John   VIC     2
  Sarah   QLD     1
  Haley   TAS     1
   Paul   NSW     2
   John   VIC     3

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:2)

或者,如果你感觉dplyr - 只是无环路:

new.df <- my.df %>% 
   group_by(FirstName) %>% 
   mutate(Index=1:n())

或者你可以使用row_number()

或使用data.table

library(data.table)
setDT(my.df)[, Index := seq_len(.N), by = FirstName]

或者只是基地R

with(my.df, ave(seq(FirstName), FirstName, FUN = function(x) seq(length(x))))

答案 1 :(得分:0)

快速而又脏的......

my.df = data.frame(FirstName = c('John', 'Paul', 'John', 'Sarah', 'Haley', 'Paul', 'John'),
                   State = c('VIC', 'NSW', 'VIC', 'QLD', 'TAS', 'NSW', 'VIC'))

my.df$Index = 0
for(i in 1:nrow(my.df)){
  nameinds = which(my.df$FirstName==my.df$FirstName[i])
  my.df$Index[nameinds] = 1:length(nameinds)
}

print(my.df)