2012-12-30 19 views
3

我是R新手。這是我的具體問題。 假設我正在處理以下用於此示例的名爲「數據」的數據集。我的標題是state,typevalue如何添加行中包含的特定數據?

structure(list(state = structure(c(1L, 1L, 1L, 1L, 2L, 2L), .Label = c("AK", 
"AL"), class = "factor"), type = structure(c(2L, 2L, 1L, 1L, 
2L, 1L), .Label = c(" D", " R"), class = "factor"), value = c(100L, 
200L, 100L, 150L, 100L, 150L)), .Names = c("state", "type", "value" 
), class = "data.frame", row.names = c(NA, -6L)) 



    state type value 
1 AK R 100 
2 AK R 200 
3 AK D 100 
4 AK D 150 
5 AL R 100 
6 AL D 150 

我想寫一個函數,將爲每個類型和狀態加起來的值。例如。對於RAK類型的輸出將是300。AKD輸出將是250。RAL型輸出爲100,和DAL型輸出將是150

+1

快速提示你螞蚱:方括號在搜索框中輸入[R將返回在R標記,即搜索所有問題的「[R]」 。然後點擊「投票」標籤並滾動瀏覽頂部的問題。此外,超過600個問題包含「聚合」一詞,即「聚合」。 –

回答

5

你可以只使用tapply

data <- read.csv(header=TRUE,text="state, type, value 
AK, R, 100 
AK, R, 200 
AK, D, 100 
AK, D, 150 
AL, R, 100 
AL, D, 150") 

tapply(data$value, list(data$state,data$type), sum) 
#  D R 
# AK 250 300 
# AL 150 100 
+0

感謝您的反饋。對此,我真的非常感激! –

7

不plyr,只是aggregate

> aggregate(value~state+type, data=data,FUN=sum) 
    state type value 
1 AK D 250 
2 AL D 150 
3 AK R 300 
4 AL R 100 
+0

感謝您的幫助!爲我節省了大量的時間。 –

3

一個plyr的解決辦法是:

ddply(data, .(state,type),summarise, total=sum(value, na.rm = TRUE)) 
# state type total 
# 1 AK D 250 
# 2 AK R 300 
# 3 AL D 150 
# 4 AL R 100 
5

雖然@Matthew倫德伯格的回答是最好的,這裏的一些替代品。

如果你真的想使用plyr你可以這樣做:

ddply(DF, .(state, type), numcolwise(sum)) 
    state type value 
1 AK D 250 
2 AK R 300 
3 AL D 150 
4 AL R 100 

這裏的另一種解決方案使用reshape2包

library(reshape2) 
dcast(melt(DF), state + type ~ variable, sum) 
Using state, type as id variables 
    state type value 
1 AK D 250 
2 AK R 300 
3 AL D 150 
4 AL R 100 

如果你想只是一個載體那麼這可能是有用的:

sapply(with(DF, split(value, list(state, type))), sum) 
AK.D AL.D AK.R AL.R 
250 150 300 100 
3

爲了完整起見,還有「data.table」包,並且在基地R.假設你的數據集被稱爲「MYD」:

by(myd$value, list(myd$state, myd$type), FUN=sum) 
# : AK 
# : D 
# [1] 250 
# ------------------------------------------------------------------------------ 
# : AL 
# : D 
# [1] 150 
# ------------------------------------------------------------------------------ 
# : AK 
# : R 
# [1] 300 
# ------------------------------------------------------------------------------ 
# : AL 
# : R 
# [1] 100 

library(data.table) 
DT <- data.table(myd) 
DT[, sum(value), by = "state,type"] 
# state type V1 
# 1: AK R 300 
# 2: AK D 250 
# 3: AL R 100 
# 4: AL D 150 
相關問題