我有一个非常基本的问题,更有经验的编码员可能很容易回答
我有几列数据。我已将它们转换为向量x1
到x9
我按如下方式运行了表函数:
table(x1,x2)
我的问题是:
我该如何制作它以便我有一组表格,例如:table(x1,x2)
,table(x1,x3)
,table(x1,x4)
等,而不重复输入表格函数(或任何函数我我正在使用;我还需要制作条形图)?我怀疑这涉及一个应用功能,但我无法让它工作。
答案 0 :(得分: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]))
要获得条形图,您可以保存该输出并一起使用lapply
和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))
这是一个示例图。如果需要,可以进行更多自定义“漂亮”。
答案 1 :(得分: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)