【问题标题】:Removing columns with 0 in R in a table删除表中 R 中 0 的列
【发布时间】:2017-03-07 14:29:33
【问题描述】:

我在 R 中有一个数据框。我从这个数据框中提取了一列来处理。该列有一个变量和一个频率。 例如:

      Var1  Freq
1  1100  1697
2  1200  2551
3  1300  4064
4  1400   978
5  2100  1529
6  2200  2006
7  2300  2900
8  2400  1336
9  3100  1808
10 3200  6075

然后我对此进行了排序,最高的 5 个频率显示在顶部,其余的被分组在“其他”下,并将其转换为数据框,例如:

   Var1  Freq
1  6000 23844
2  4800 23216
3  3300  8821
4  3200  6075
5  3400  4595
6 other 28737

因为我的目标是将这些数据放入饼图中以显示比例,然后我将数据框转换为表格使用

#convert dataframe into table
mytableSC <- table(expandRows(sectorcode_otherdf, "Freq"))

mytableSC 给我...

 1100  1200  1300  1400  2100  2200  2300  2400  3100  3200  3250  3300  3350  3400  3500  4600  4700  4800  4900  6000 
    0     0     0     0     0     0     0     0     0  6075     0  8821     0  4595     0     0     0 23216     0 23844 
 7000 other 
    0 28737

我想删除包含 0 的列,并且我必须对初始数据框中的许多其他列执行此操作,因此我希望这可以自动化。我尝试了各种方法,但似乎都没有 例如:newtable &lt;- mytableSC[,mytableSC[1,] != 0] 返回错误代码:[.default(mytableSC, 1, ) 中的错误:维数不正确

我可以使用newtable &lt;- mytableSC[-c(1:9, 11, 13, 15:17, 19, 21)] 这实际上确实有效,但这将是一个漫长而乏味的过程,因为其他列有更多变量,而且我需要更长的时间来计算哪些列中有 0。 我也尝试过其他方法,但我不确定矩阵或数据框的代码是否能解决这个特定问题。 任何帮助或建议将不胜感激!

【问题讨论】:

  • newtable &lt;- mytableSC[mytableSC!=0]
  • 如此简单的解决方案!效果很好,非常感谢!
  • 是的,mytableSC 是一个命名向量(一维对象)。我的解决方案只是您的mytableSC[-c(1:9, 11, 13, 15:17, 19, 21)] 的概括。给出错误的代码有太多逗号(用于索引多个维度)。
  • 您可以在因子上使用droplevels(或仅使用as.character)来消除非发生级别。如果你真的需要一个命名向量,你可以使用setNames 而不是再次扩展和聚合。
  • 为什么需要使用table来创建饼图?你就不能pie(mydf$Freq, labels = mydf$Var1)吗?

标签: r dataframe dplyr multiple-columns


【解决方案1】:

您似乎正在绕道而行。要创建饼图(不会对此做出判断),您可以直接使用排序和聚合data.frame 中的值。应该这样做:

pie(mydf$Freq, labels = mydf$Var1)

如果你想要中间命名向量,你可以像这样生成它:

setNames(mydf$Freq, mydf$Var1)
##  6000  4800  3300  3200  3400 other 
## 23844 23216  8821  6075  4595 28737 

如果这真的是要从表格中删除零,而不是要从现有的图表中获取饼图,那么有几个选项可供查看。以下是一些可重现的示例数据:

set.seed(1)
myvec <- factor(sample(letters[sample(26, 5)], 100, TRUE), letters)
mytab <- table(myvec)

mytab
## myvec
##  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z 
##  0  0  0  0 17  0 13  0  0 24  0  0  0 18  0  0  0  0  0  0 28  0  0  0  0  0 

mytab[mytab > 0]           # alternative of @jogo
## myvec
##  e  g  j  n  u 
## 17 13 24 18 28 

mytab[mytab != 0]          # @jogo
## myvec
##  e  g  j  n  u 
## 17 13 24 18 28 

table(droplevels(myvec))   # @alistaire
## 
##  e  g  j  n  u 
## 17 13 24 18 28 

【讨论】:

  • 我只使用饼图是因为我被要求这样做(我承认它们不如其他图表有效)。因为我不得不将一些变量分组到一个“其他”类别中,这就是导致我出现问题的原因,而不是直接从数据框创建饼图。感谢您的 cmets/help/examples,它非常有用。
猜你喜欢
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 2022-06-19
  • 2022-11-15
  • 1970-01-01
  • 2013-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多