2016-10-04 46 views
1

我想創建一個新的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 

很多的感謝!

回答

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

你的第二個更強大,例如'_df < - data.frame(「item」= c(5,1,2,2,2,5,4))'不適用於你的第一個建議 – Henry

+0

@Henry Ohh ..我懂了!很好的觀察。謝謝。 –

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 
+3

當項目欄未訂購時,這不起作用。例如當項目列是'c(2,2,1,1,1,1,2,2,2,3)'時。 – 9Heads

+0

從你的例子中假設列是有序的,如果沒有,你不能再對它們進行排序嗎? –

+0

但是我可能不想對數據集進行排序,假設數據集中有其他列,而其他答案無論排序如何,都會給出正確答案。 – 9Heads

1

您可以data.table嘗試:創建corrresponds的項目總數,由itemfrequency

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