计算R中表中值的出现次数

时间:2018-01-21 04:39:33

标签: r

对于以下数据集,我们如何计算表中值的出现? 例如,我想计算单个代码中以下数据集中U,X,Y,Z的发生次数。

预期输出低于数据集。

U    15 
X    08
Y    07
Z    03


h1   h2  h3  h4  h5  h6  h7  h8
U   U   NULL    U   Y   NULL    Y   X
U   NULL    U   U   Y   Y   X   X
U   U   U   NULL    U   NULL    Y   NULL
NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
X   V   U   U   Y   NULL    Z   X
Y   X   NULL        X   Y   Z   U
X   NULL    U   NULL    NULL    U   Z   Y
NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL

2 个答案:

答案 0 :(得分:0)

假设df是您的数据框。计算出现次数的一种简单方法是:sum(df == X, na.rm = TRUE)

要获得所有计数,需要以下代码:

values <- c("U","V","X","Y","Z")
sapply(values,function(x,y){sum(y == x, na.rm = TRUE)},data )

和输出:

> sapply(values,function(x,y){sum(y == x, na.rm = TRUE)},data )
 U  V  X  Y  Z 
15  1  8  9  3 
> 

答案 1 :(得分:0)

这是一种使用tidyr的方法,在向数据的第6行添加NULL之后,因为它只有7列。请注意,原始数据有9个Y,而不是OP中总结的7个,以及1 V.

rawData <- "h1   h2  h3  h4  h5  h6  h7  h8
U   U   NULL    U   Y   NULL    Y   X
U   NULL    U   U   Y   Y   X   X
U   U   U   NULL    U   NULL    Y   NULL
NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
X   V   U   U   Y   NULL    Z   X
Y   X   NULL    NULL    X   Y   Z   U
X   NULL    U   NULL    NULL    U   Z   Y
NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL"

data <- read.table(text=rawData,stringsAsFactors=FALSE,
                   header=TRUE,na.strings="NULL")
library(tidyr)
tidyData <- gather(data,key="variable",na.rm=TRUE)
table(tidyData$value)

...和输出:

> table(tidyData$value)

 U  V  X  Y  Z 
15  1  8  9  3 
>

使用dplyrtidyr,解决方案如下所示。

library(dplyr)
gather(data,key="variable",na.rm=TRUE) %>% 
     group_by(value) %>% summarise(n= n())

...和输出:

> gather(data,key="variable",na.rm=TRUE) %>% 
+      group_by(value) %>% summarise(n= n())
# A tibble: 5 x 2
  value     n
  <chr> <int>
1 U        15
2 V         1
3 X         8
4 Y         9
5 Z         3
>