R 如何添加行中包含的特定数据?
我是R的新手。这是我的具体问题。 假设在本例中,我正在使用以下名为“data”的数据集。我的标题是R 如何添加行中包含的特定数据?,r,plyr,R,Plyr,我是R的新手。这是我的具体问题。 假设在本例中,我正在使用以下名为“data”的数据集。我的标题是状态,类型,和值 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"),
状态
,类型
,和值
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
我想写一个函数,将每个类型和状态的值相加。例如对于AK
typeR
而言,输出为300。对于AK
类型D
而言,输出将为250。对于AL
typeR
而言,输出为100,对于AL
typeD
而言,输出为150 您可以使用
data不是plyr,而是聚合
> 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
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
尽管@Matthew Lundberg的答案是最好的,但这里有一些替代方案
如果您真的想使用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
下面是使用Reformae2包的另一个解决方案
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
为了完整起见,在base R中还有“data.table”包和by
。假设您的数据集名为“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
库(数据表)
谢谢你的帮助!节省了我很多时间。谢谢你的反馈。我真的很感激!蚱蜢:搜索框中R周围的方括号将返回R标记中的所有问题,即搜索“[R]”。然后单击“投票”选项卡并滚动浏览顶部问题。此外,600多个问题包含“聚合”一词,即“[R]聚合”。
sapply(with(DF, split(value, list(state, type))), sum)
AK.D AL.D AK.R AL.R
250 150 300 100
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