添加百分比列和不在top10最常见值中的值的频率

时间:2018-04-12 09:19:43

标签: r

下面是在我的数据框中的一个变量中获取前10个最常见值的代码。

#Remove NAs
dataL[dataL == "NA"] <- NA
dataS <- na.omit(dataL)

#getting the Top10 frequent values
Y <- dataS$Variable
X <- sort(table(Y), decreasing=TRUE)[1:10]
Z <- data.frame(X)
colnames(Z)= c("Value", "Frequency")

这是它的输出

    Value      Frequency
1   1           635
2   0           296
3   1,000,000   115
4   10,000,000  110
5   20,000,000  104
6   5,000,000   101
7   50,000,000  86
8   25,000,000  85
9   30,000,000  80
10  40,000,000  77

我想在新列上输出总频率百分比。并且还添加缺失值频率以及不在top10中的所有其他值的频率。所以输出应该如下所示。

    Value       Frequency    % of Total
0   Missing     67          0.50%
1   1           635         4.60%
2   0           296         2.10%
3   1,000,000   115         0.80%
4   10,000,000  110         0.80%
5   20,000,000  104         0.70%
6   5,000,000   101         0.70%
7   50,000,000  86          0.60%
8   25,000,000  85          0.60%
9   30,000,000  80          0.60%
10  40,000,000  77          0.60%
11  All other   12,136      87.40%

1 个答案:

答案 0 :(得分:1)

我相信这可以做你想要的 首先,补充一些数据。请注意useNA = "ifany"调用中的参数table以及子集X,我使用整个表。

set.seed(5787)    # Make the results reproducible
p <- runif(100)
Y <- sample(100, 1e4, TRUE, prob = p/sum(p))
Y[sample(100, 10)] <- NA
X <- sort(table(Y, useNA = "ifany"), decreasing=TRUE)
Z <- data.frame(X)
colnames(Z)= c("Value", "Frequency")
Z$Value <- as.character(Z$Value)

现在,只需计算零件并将各个部分放在一起。

Z[['% of Total']] <- 100*Z[["Frequency"]]/sum(Z[["Frequency"]])
Other <-  c("All Other", colSums(Z[-c(1:10, which(is.na(Z$Value))), 2:3]))
Z <- rbind(Z[is.na(Z$Value), ], head(Z, n = 10), Other)

Z$Value[is.na(Z$Value)] <- "Missing"
row.names(Z) <- NULL
Z
#       Value Frequency % of Total
#1    Missing        10        0.1
#2         61       202       2.02
#3         13       200          2
#4         23       197       1.97
#5         55       197       1.97
#6         16       196       1.96
#7         25       189       1.89
#8         48       189       1.89
#9         58       185       1.85
#10        79       183       1.83
#11        54       181       1.81
#12 All Other      8081      80.81