匹配R中的不同表并处理结果

时间:2014-08-02 15:14:52

标签: r

我有一张桌子

>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

我想为每个类创建一个包含不同列的数据框,每个类都应该添加它们的值。我怎么能这样做?

3 个答案:

答案 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()