我有一个包含两列(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
任何帮助将不胜感激
答案 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)