1

我是 R 编程的新手,所以我寻求帮助来开始我的工作。我有一个包含 4 列的“长”数据集(我之前在 R 中对其进行了重新调整):

d=matrix(c(1,2,3,4,5,6,7,"A","A","A","B","B","B","B",0,0,99,0,0,99,0,99,0,99,99,0,0,99), ncol=4)
colnames(d) = c("ID","S.ID","ValA","ValB"); dt=as.table(d)

我想分别为每个 S.ID(即 A 和 B)创建一个 ValA 和 ValB 计数的列联表

例如(这里)——

在此处输入图像描述

在我的实际示例中,我有 17 个 S.ID,我想编写一个程序来为每个 S.ID 生成列联表。

此外,这在 R Studio 中会更容易吗?如果是这样,请你也详细说明如何?

非常感谢!

- 感谢所有如此迅速回答的人!:)

4

3 回答 3

4

您可以table在多个变量上使用:

with(as.data.frame(d), table(ValA, ValB, S.ID))

# , , S.ID = A
#    ValB
#ValA 0 99
#  0  1  1
#  99 0  1

#, , S.ID = B
#    ValB
#ValA 0 99
#  0  1  2
#  99 1  0
于 2017-02-14T11:57:12.343 回答
1

使用tapplyby需要转换为 data.frame:

d<-data.frame(d)
by(d, d$S.ID, function(grouped.d) table(grouped.d$ValA, grouped.d$ValB))
于 2017-02-14T11:56:43.553 回答
0

你可以试试这个:

d <- as.data.frame(d)
l <- lapply(unique(d$S.ID), function(x) xtabs(~ValB+ValA, subset(d, S.ID==x)))
names(l) <- unique(d$S.ID)
l
#$A
#    ValA
#ValB 0 99
#  0  1  0
#  99 1  1

#$B
#    ValA
#ValB 0 99
#  0  1  1
#  99 2  0
于 2017-02-14T11:54:24.747 回答