下面是在我的数据框中的一个变量中获取前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%
答案 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