Skip to content

frequency table across multiple variables

5 messages · Philipp Pagel, Ivar Herfindal, Ralikwen +1 more

#
Dear R users,

I have a dataframe like this:

x1<-c(1,2,3,4,NA ,NA ,NA, 3, 1, 1, 1, 1, 2, 2, 3, 4, 4)
x2<-c(2,3,4,3,4,3,4,2,2,3,4,NA,NA,NA,NA,4,3)
x3<-c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,1,2)
m<-data.frame(x1,x2,x3)

I would like to create a frequency table like this:

      x1  x2  x3
NA
1
2
3
4

where the values in each cell would be the count of the value for that
variable.
How can I do this?

Thanks for the help.
Bal?zs
#
The following will work IF all columns are integer:
x1 x2 x3
[1,]  5  0  5
[2,]  3  3  5
[3,]  3  5  4
[4,]  3  5  3

Please note that the result will look slightly different, if some columns contain 
the largest value and others don't:
$x1
[1] 5 3 3 2 1

$x2
[1] 0 3 5 5

$x3
[1] 5 5 4 3


cu
	Philipp
#
Hi

Here is an alternative solution which will include count of the NA. It 
may not be "formally" correct, but it seems to work:

 > mapply(function(x) table(factor(ifelse(is.na(x), "NA", x), 
levels=c("NA",1,2,3,4))), m)
   x1 x2 x3
NA  3  4  0
1   5  0  5
2   3  3  5
3   3  5  4
4   3  5  3
 >

Hope this helps

Ivar Herfindal

Philipp Pagel skrev:
#
Hi,
I went for a slight alteration of your solution

x1<-c(1,2,3,4,NA ,NA ,NA, 3, 1, 1, 1, 1, 2, 2, 3, 4, 4)
x2<-c(2,3,4,3,4,3,4,2,2,3,4,NA,NA,NA,NA,4,3)
x3<-c(1,1,1,1,"aaa",2,2,2,3,3,3,3,4,4,4,1,2)
m<-data.frame(x1,x2,x3)
m<-replace(m,is.na(m),"NA")
levels=unique(as.vector(as.matrix(m)))
mapply(function(x) table(factor(levels)), m)

Many thanks for the help of both of you.
Bal?zs
Ivar Herfindal wrote: