我有一张桌子
>treasuremap
[,1] [,2] [,3] [,4]
[1,] 0.152236 4.2447655 2.991742 37.89973
[2,] 2.354508 0.5854421 1.771338 62.51665
并且每个值对应于不同的类
>classes
[,1] [,2] [,3] [,4]
[1,] 1 4 4 4
[2,] 2 5 5 5
我想为每个类创建一个包含不同列的数据框,每个类都应该添加它们的值。我怎么能这样做?
答案 0 :(得分:2)
目前尚不清楚自己想做什么。如果要将treasuremap
的元素与classes
的元素分组,请执行sum
tapply(treasuremap, classes, FUN=sum)
# 1 2 4 5
# 0.152236 2.354508 45.136238 64.873430
或者,如果它是一个大数据集
library(data.table)
dt1 <- data.table(treasuremap=c(treasuremap),classes=c(classes))
dt1[,list(treasuremap=sum(treasuremap)), by=classes]
答案 1 :(得分:0)
您可以创建一个函数,让每个类将值转换为类位置的下一行。
首先,这个函数应该允许两个参数,类值和宝藏图,然后为每个类选择宝藏图的所有值并将它们放在一个向量中,然后将它们与cbind
粘贴在一起并输出为功能的返回。这样,您将获得每行与不同类的数据框。如果您希望这些值的总和使用sum
。
注意:为了避免使用for循环使用apply系列函数,它们将花费更少。
答案 2 :(得分:0)
这样的事情会起作用吗?
使用两个表作为向量创建data.frame
:
combined<-data.frame("classes"=as.vector(classes),"treasuremap"=as.vector(treasuremap))
。
然后创建一个表,其中包含为每个类计算的总和:
sum_table<-aggregate(treasuremap~classes,combined,sum)
。
输出行中的总和,如果您希望它们作为列,则可以使用sum_table
转置t()
。