R:计算多列中值的出现次数

时间:2017-10-30 19:01:37

标签: r

我是R的新手,并且正在使用它来对非常大的数据集(1000万个案例)进行统计分析。

在此数据集中,有许多变量/列(Diagnosis1,Diagnosis2 ... Diagnosis30)包含分类代码。案例列为行。实际数据集中有30列和大约200个唯一分类代码。代码不会在同一个案例中多次出现,列号并不意味着任何重要性。

像这样的东西

new float [5];

我需要的是整体计数,如

Diagnosis1         Diagnosis2         Diagnosis3
001                123                234
456                001                678
123                998                999

要使分类代码的频率出现在总人口中。

2 个答案:

答案 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)