2014-05-12 42 views
-1

我有一個數據框架叫做dataSet並且在那個data.frame中我希望能夠引用一個值一個特定的列(因爲它是一個重複的值)並按每個值彙總/總計總和。R:想要按列中的值聚合(總計和整個案例的總數)

我知道我可以調用特定的列。例如,要調用第四列數據,我會使用這個。

dataSet[,4] 

如果數據集是這樣的:

col1 col2 col3 col4 
3 6 2 1 
5 2 6 2 
5 6 12 3 
4 3 NA 4 
5 2 NA 3 
7 6 NA 1 
6 6 19 4 
9 3 2 1 

我希望能夠聚集(GROUP BY,對於那些你們誰知道SQL)的COL4值。

一,(我選擇任何一列)的總和,說COL4在這種情況下。但理想情況下,我可以將列作爲變量並從任何列中調用值。

所以我會爲總和 COL1答案爲COL4的每個公共價值,像這樣:

col1 col4 
19  1 
5  2 
10  3 
10  4 

二,完成案件的數量,作爲標誌着由「數量」一欄。

count col4 
2 1 
1 2 
1 3 
1 4 

作爲R的新手,我發現如何在列中引用(或調用)特定值是很困難的。我有一個dataframe [i,j]的參考部分,其中i = row,j = col。我想一個三級的問題是,我在哪裏可以瞭解更多關於如何使列和值引用(或電話)到R內的所有對象(例如列表,data.frames)

回答

0

這樣的事情?

d <- structure(list(col1 = c(3L, 5L, 5L, 4L, 5L, 7L, 6L, 9L), col2 = c(6L, 
2L, 6L, 3L, 2L, 6L, 6L, 3L), col3 = c(2L, 6L, 12L, NA, NA, NA, 
19L, 2L), col4 = c(1L, 2L, 3L, 4L, 3L, 1L, 4L, 1L)), .Names = c("col1", 
"col2", "col3", "col4"), class = "data.frame", row.names = c(NA, 
-8L)) 

library(reshape) 
d1 <- melt.data.frame(d, id = 'col4') 
d1$variable <- as.character(d1$variable) 
head(d1) 
     col4 variable value 
1 1  col1  3 
2 2  col1  5 
3 3  col1  5 
4 4  col1  4 
5 3  col1  5 
6 1  col1  7 
library(dplyr) 
d1 %.% 
    group_by(variable, col4) %.% 
    summarise(
    s = sum(value, na.rm = T), 
    c = length(na.omit(value))) 
Source: local data frame [12 x 4] 
Groups: variable 

    variable col4 s c 
1  col1 1 19 3 
2  col1 2 5 1 
3  col1 3 10 2 
4  col1 4 10 2 
5  col2 1 15 3 
6  col2 2 2 1 
7  col2 3 8 2 
8  col2 4 9 2 
9  col3 1 4 2 
10  col3 2 6 1 
11  col3 3 12 1 
12  col3 4 19 1 
+0

我不太清楚這是走向的方向。下面的答案符合我正在尋找的方向。一個用於根據col4對一列(Col1)進行求和。 第二部分將計算complete.cases。 – Paul

+0

這就是你用這些方法得到的結果。去嘗試一下。您的計數可能不正確。試用@ samhiggins2001提出的表格解決方案和我的代碼。 –

+0

這可能是我頭上的一點點(欣賞它雖然 - 拉伸我)。我無法在d1函數中獲得'd'。我假設這是我的目錄或data.frame是否正確? 我得到這個錯誤: – Paul

1

您可以使用aggregate函數查找值的列1總和爲column4每個獨特的價值。 (對於這個函數文檔可以通過在R命令提示輸入help(aggregate)中找到)的語法是這樣的:

aggregate(x=dataSet$col1, by=list(dataSet$col4), FUN=sum) 

或,給出相同的結果:

aggregate(x=dataSet[,"col1"], by=list(dataSet[,"col4"]), FUN=sum) 

孤男寡女得到listby參數aggregate似乎有點奇怪我在第一,但它可以讓你以組提供多個字段您的值通過(與參數x通過),因此相當於SQL的group by條款。

要查找某列中的某個值出現的數,您可以使用table功能:

table(dataSet$col4) 

,或者給予同樣的結果:

table(dataSet[,"col4"])