我在R中有一个数据框。从这个数据框中我已经提取了一列来处理。该列有一个变量和一个频率。 E.g:
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 in的列,我必须使用初始数据帧中的许多其他列来执行此操作,因此我希望这是自动化的。我尝试了各种各样的东西,但似乎都没有
例如:newtable <- mytableSC[,mytableSC[1,] != 0]
返回错误代码:[.default
(mytableSC,1,)中的错误:维数不正确
我可以使用newtable <- mytableSC[-c(1:9, 11, 13, 15:17, 19, 21)]
这实际上确实有效,但这将是一个漫长而乏味的过程,因为其他列有更多的变量,并且我需要花费更长的时间来计算哪些列有0。
我也尝试了其他的东西,但我不确定矩阵或数据帧的代码是否适用于这个特定的问题。
任何帮助或建议将不胜感激!
答案 0 :(得分:0)
你似乎正在以一种非常迂回的方式走这条路。要创建饼图(不打算对其进行判断调用),您可以直接使用已排序和聚合的data.frame
中的值。像下面这样的东西应该这样做:
pie(mydf$Freq, labels = mydf$Var1)
如果你想要中间名为vector,你可以这样生成它:
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