【问题标题】:Is it possible to order an R contingency table by rowSums是否可以通过 rowSums 订购 R 列联表
【发布时间】:2019-11-09 02:55:22
【问题描述】:

我创建了一个列联表,其中包含 510 个类别/因素的多个变量/列。我想根据所有变量/列的总和对因子进行降序排序。

尝试将表转换回 DF 和 rowSums,但没有成功。 不确定是否可以在使用表格功能时进行排序?

DF structure
'data.frame':   2210 obs. of  7 variables:
 $ Paddock_ID: num  1 1 1 1 1 1 1 1 1 1 ...
 $ Year      : num  2010 2011 2011 2012 2012 ...
 $ LandUse   : chr  "Wheat" "Wheat" "Wheat" "Wheat" ...
 $ LUT       : chr  "Cer" "Cer" "Cer" "Cer" ...
 $ LUG       : chr  "Wheat" "Wheat" "Wheat" "Wheat" ...
 $ Tmix      : Factor w/ 6 levels "6","5","4","3",..: 6 5 6 4 6 5 4 5 6 6 
...
 $ combo     : Factor w/ 510 levels "","GLYPHOSATE",..: 416 6 59 119 30 
22 510 2 2 509

my table
a <- table(DF$"combo", DF$"LUG") 

我的表格没问题,但希望根据所有变量/列的总和对其进行排序,即草甘膦 = 124,然后是烯草酮 = 69,然后是百草枯 = 53 ... 所有 510 个类别(行)的降序。

                               Barley Canola Lupin Other Pasture Wheat

GLYPHOSATE                             4     46     6     5      23    40
TRALKOXYDIM                            0      0     0     0       0     8
MCPA; GLYPHOSATE; METSULFURON          0      0     0     0       0     1
METSULFURON                            1      0     0     0       0     1
BUTROXYDIM; METSULFURON                1      0     0     0       0     0
GLYPHOSATE; METSULFURON; PYRAFLUFEN    0      0     0     0       0     1
PARAQUAT                               2      7     7     2      28     7
CLETHODIM                              0     41    15     3       0     0

【问题讨论】:

  • 假设您已将列联表存储为cm。那么,如果你这样做cm[order(rowSums(cm)),]会发生什么?
  • 如果我正确理解了这个问题,您必须指定 decreasing = T 以获得正确的解决方案。
  • @RStats 是的,你是对的。

标签: r contingency


【解决方案1】:

使用示例数据集:

grades <- c(1,1,1,2,2,1,1,2,1,1,1,2,3)
credits <- c(4,4,4,8,4,4,8,4,4,4,8,4,4)
df <- cbind(grades, credits)

您可以使用rowSums() 查找行和。

一种可能的解决方案是为行和创建另一列,然后使用decreasing = T 进行排序。

df <- as.data.frame(df)
df$sum <- rowSums(df)
df <- df[order(df[,3], decreasing = T),]

【讨论】:

  • 不需要再创建一列。
  • 取决于您是否对实际金额感兴趣。我假设当一个人根据一个值进行排序时,他们可能有兴趣保留这些信息。
  • 您也可以将order(df[,3]) 放入rev() 以减少输入。
  • @gersht 我认为rev 的效率会低于decreasing = T。检查?rev的描述部分。
  • 我已经尝试了 rowSums 选项并减少 =T 但是虽然表格在 consol 中显示为 6 列,但结构是 2 列的列表,如下所示,所以这些不起作用“表” int [1:507, 1:6] 0 0 5 0 0 0 1 1 1 0 ... - attr(*, "dimnames")=List of 2 ..$ : chr [1:507] "" "CLOPYRALID " "GLYPHOSATE" ..$ : chr [1:6] "Barley" "Canola" ... 想我只需要重新排列这个列表,这样我的作物就在不同的列中,然后进行行和然后减少,但尝试了级别和 group_by 没有运气?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 2020-12-20
  • 2017-03-26
  • 1970-01-01
  • 2015-08-26
相关资源
最近更新 更多