我是R的新手,并且正在使用它来对非常大的数据集(1000万个案例)进行统计分析。
在此数据集中,有许多变量/列(Diagnosis1,Diagnosis2 ... Diagnosis30)包含分类代码。案例列为行。实际数据集中有30列和大约200个唯一分类代码。代码不会在同一个案例中多次出现,列号并不意味着任何重要性。
像这样的东西
new float [5];
我需要的是整体计数,如
Diagnosis1 Diagnosis2 Diagnosis3
001 123 234
456 001 678
123 998 999
要使分类代码的频率出现在总人口中。
答案 0 :(得分:4)
根据我的评论,完整的答案将是这样的。
dat <- read.table(text = "
Diagnosis1 Diagnosis2 Diagnosis3
001 123 234
456 001 678
123 998 999
", header = TRUE)
count <- table(unlist(dat))
perc <- 100*count/sum(count)
result <- data.frame(code = sprintf("%03d", as.integer(names(count))),
count = as.integer(count), perc = as.numeric(perc))
result
# code count perc
#1 001 2 22.22222
#2 123 2 22.22222
#3 234 1 11.11111
#4 456 1 11.11111
#5 678 1 11.11111
#6 998 1 11.11111
#7 999 1 11.11111
答案 1 :(得分:3)
还可以使用prop.table
来计算百分比:
DF = data.frame(table(unlist(df)))
DF$prop = prop.table(DF$Freq)
<强>结果:强>
Var1 Freq prop
1 1 2 0.2222222
2 123 2 0.2222222
3 234 1 0.1111111
4 456 1 0.1111111
5 678 1 0.1111111
6 998 1 0.1111111
7 999 1 0.1111111
或dplyr
+ tidyr
:
library(dplyr)
library(tidyr)
df %>%
gather(variable, value) %>%
group_by(value) %>%
summarize(count = n()) %>%
mutate(prop = prop.table(count),
perc = sub("0\\.(\\d{2})\\d+", "\\1%", prop))
<强>结果:强>
# A tibble: 7 x 4
value count prop perc
<int> <int> <dbl> <chr>
1 1 2 0.2222222 22%
2 123 2 0.2222222 22%
3 234 1 0.1111111 11%
4 456 1 0.1111111 11%
5 678 1 0.1111111 11%
6 998 1 0.1111111 11%
7 999 1 0.1111111 11%
数据:强>
df = read.table(text = "Diagnosis1 Diagnosis2 Diagnosis3
001 123 234
456 001 678
123 998 999", header = TRUE)