2

我有一个非常基本的问题,更有经验的编码人员可能很容易回答。
我有几列数据。x1我已经通过将它们变成了向量x9
我按如下方式运行表函数:

table(x1,x2) 

我的问题是:

我怎样才能使我有一组表,例如:table(x1,x2),等table(x1,x3)table(x1,x4)而无需重复输入表函数(或我正在使用的任何函数;我还需要制作条形图)?我怀疑这涉及一个应用功能,但我一直无法让它工作。

4

2 回答 2

3

您可以lapply按如下方式使用:

# First, some sample data
set.seed(1)
yo = data.frame(x1 = sample(letters[1:5], 20, replace=TRUE),
                x2 = sample(0:2, 20, replace=TRUE),
                x3 = sample(0:2, 20, replace=TRUE),
                x4 = sample(0:2, 20, replace=TRUE))
lapply(2:ncol(yo), function(x) table(yo[, 1], yo[, x]))

要获取条形图,您可以保存该输出并一起使用lapplyand barplot,或者您可以执行以下操作:

par(mfrow = c(3, 1)) # To plot them all at once...
lapply(2:ncol(yo), function(x) barplot(table(yo[, 1], yo[, x]), 
                                       beside=TRUE, legend=TRUE))

这是一个示例图。如果需要,可以进行更多自定义以“美化”。

在此处输入图像描述

于 2012-08-22T02:36:22.913 回答
2

只需使用 lapply 将列表的元素串行传递给函数。使用 mrdwab 的向量table

x1 = sample(letters[1:5], 20, replace=TRUE)
x2 = sample(0:2, 20, replace=TRUE)
x3 = sample(0:2, 20, replace=TRUE)
x4 = sample(0:2, 20, replace=TRUE)

lapply(list(x2,x3,x4), table, x1)
[[1]]
   x1
    a b c d e
  0 0 1 2 2 2
  1 1 1 0 2 0
  2 4 2 1 1 1

[[2]]
   x1
    a b c d e
  0 1 2 1 2 1
  1 3 0 0 2 2
  2 1 2 2 1 0

[[3]]
   x1
    a b c d e
  0 2 2 0 3 3
  1 2 2 2 0 0
  2 1 0 1 2 0

Barplot 不适用于字符向量,因此对于 ttmaccer 的向量,同样的方法也适用:

X1<-1:10
X2<-2:11
X3<-3:12
X4<-4:13
lapply(list(X1,X2,X3,X4), barplot)
于 2012-08-22T02:55:57.053 回答