在 table 中删除 R 中的 0 列

Removing columns with 0 in R in a table

我在 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 个频率显示在顶部,其余的在 'other' 下分组并将其转换为数据框,例如:

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

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

将数据框转换为 table
#convert dataframe into table
mytableSC <- table(expandRows(sectorcode_otherdf, "Freq"))

我的tableSC给我...

 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 的列,并且我必须对初始数据框中的许多其他列执行此操作,因此我希望这是自动化的。我尝试了各种方法,但 none 似乎有效 例如:newtable <- mytableSC[,mytableSC[1,] != 0] returns 错误代码:[.default(mytableSC, 1, ) 错误:维数不正确

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

你似乎在绕弯子。要创建饼图(不打算对其进行判断),您可以直接使用排序和聚合中的值 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 

如果这真的是关于从 table 中删除零,而不是关于从您拥有的内容中获取饼图,那么有几个选项可供查看。这是一些可重现的示例数据:

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