在 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
我在 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