我想创建一个新的frequency
列,并在其中填入item
中每个唯一值的总计数。我试过了:
df$frequency <- sum(df$item) #gives me total sum
df$frequency <- sum(unique(df$item)) # gives me 6 for some reason
df$frequency <- sum(df$item == 1) #gives me total count per selected value
但我真的想立刻生成它们。
示例数据:
> df <- data.frame("item" = c(1,1,1,1,2,2,2,3))
> df
item
1 1
2 1
3 1
4 1
5 2
6 2
7 2
8 3
期望的输出:
> df
item frequency
1 1 4
2 1 4
3 1 4
4 1 4
5 2 3
6 2 3
7 2 3
8 3 1
提前多多谢谢!
答案 0 :(得分:4)
您可以使用table
df$frequency <- table(df$item)[df$item]
# item frequency
#1 1 4
#2 1 4
#3 1 4
#4 1 4
#5 2 3
#6 2 3
#7 2 3
#8 3 1
或ave
df$frequency <- ave(1:nrow(df), df$item, FUN = length)
答案 1 :(得分:1)
您可以尝试使用data.table
:按照frequency
创建与项目总数相对应的列item
:
library(data.table)
setDT(df)[, frequency:=.N, by=item]
df
# item frequency
#1: 1 4
#2: 1 4
#3: 1 4
#4: 1 4
#5: 2 3
#6: 2 3
#7: 2 3
#8: 3 1
答案 2 :(得分:0)
你想要这样的东西吗?
df <- data.frame("item" = c(2,2, 1,1,1,1,2,2,2,3))
df <- data.frame(item=df[order(df$item),]) # if items are not ordered
df$frequency <- as.integer(rep(table(df), table(df)))
df
item frequency
1 1 4
2 1 4
3 1 4
4 1 4
5 2 5
6 2 5
7 2 5
8 2 5
9 2 5
10 3 1