在R中创建一个带有两个变量的“by”循环

时间:2014-03-05 17:19:30

标签: r sorting loops

我有一个动物砝码的数据集,我想按两个因素所有者和动物类型排序,如果我要按1因子排序然后我会使用“by”函数但是有两个因素我不知道除了某种凌乱的“for”循环之外该怎么办(而且这种情况也不好)。

下面的代码生成了我尝试排序的类型的示例数据集。

owner <-c("Fred", "Mary", "James", "Ingrid", "Schubert", "Alice") #owner names
animal <-c("Cow", "Giant sheep", "Deer", "Giga chicken") #Animal types
data <- data.frame(owner= sample(owner, 1000, replace= TRUE), animal=sample(animal, 1000, replace= TRUE), weight=rnorm(1000,mean=250, sd=50)) #data set
owner.weight <- data.frame(matrix(nrow=length(owner), ncol=(length(animal)+1))) #set up data frame to store the animal weights
colnames(owner.weight) <-c("owner", animal) #rename columns
owner.weight[,1]<-owner #input in owner names

我想要最终得到的是一个数据框或矩阵,它具有以下双向表的列和行变量,但重量总和不是动物计数。通过这种方式,我可以看到每个主人每只动物的重量以及总数和比率。

table(data$owner,data$animal)

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

试试这个:

> xtabs(weight ~., data)
          animal
owner            Cow      Deer Giant sheep Giga chicken
  Alice     8753.989  9397.552    9448.641    11968.743
  Fred     12085.692 12062.136   11934.803     9199.231
  Ingrid   10242.862  8614.974    8668.428    13986.118
  James     8842.253 10450.657   13615.702    10580.488
  Mary      9582.275 15187.274    9005.665    12668.783
  Schubert  7155.185  9440.239   12112.422     7030.887