2016-08-04 33 views
0

我需要將col1中的值與col 2和col3相匹配,如果它們匹配,則需要添加它們的頻率。它應顯示freq1 freq2和freq3中唯一值的計數。在R中匹配列併爲它們添加頻率

col1 freq1 col2 freq2 col3 freq3 
    apple 3 grapes 4 apple 1 
    grapes 5 apple 2 orange 2 
    orange 4 banana 5 grapes 2 
    guava 3 orange 6 banana 7 

I need my output like this 
apple 6 
grapes 11 
orange 12 
guava 3 
banana 12 

我是個beginner.How我在R.

代碼這個

回答

0

我們可以使用meltdata.table與在measure參數指定patterns轉換的「寬」格式,以「長」格式,然後通過「山口」分組,我們得到「頻率」列

library(data.table) 
melt(setDT(df1), measure = patterns("^col", "^freq"), 
     value.name = c("col", "freq"))[,.(freq = sum(freq)) , by = col] 
#  col freq 
#1: apple 6 
#2: grapes 11 
#3: orange 12 
#4: guava 3 
#5: banana 12 

sum如果是交替的「關口」,「頻率」,colu我們可以將'col'列和'freq'列的子集分別創建爲data.frame(使用c(TRUE, FALSE)來回收子集列),然後使用aggregatebase R得到sum,按'col' 。

aggregate(freq~col, data.frame(col = unlist(df1[c(TRUE, FALSE)]), 
      freq = unlist(df1[c(FALSE, TRUE)])), sum) 
# col freq 
#1 apple 6 
#2 banana 12 
#3 grapes 11 
#4 guava 3 
#5 orange 12 
+0

謝謝我得到了一個新的東西,使用這個聚合函數以及我的預期結果。 – richa1465

0

我認爲,最簡單的理解爲新手將創建3個獨立的dataframes(我這裏假設你的數據幀的名字是DF):

df1 <- data.frame(df$col1, df$freq1) 
colnames(df1) <- c("fruit", "freq") 
df2 <- data.frame(df$col2, df$freq2) 
colnames(df2) <- c("fruit", "freq") 
df3 <- data.frame(df$col3, df$freq3) 
colnames(df3) <- c("fruit", "freq") 

然後按行綁定所有dataframes:

df <- rbind(df1, df2, df3) 

並在最後一組使用dplyr庫的水果和總和頻率。

library(dplyr) 
df <- df %>% 
     group_by(fruit)%>% 
     summarise(sum(freq)) 
+0

謝謝..我明白了。我現在得到所需的輸出。 – richa1465

相關問題