我想知道是否有更简单的方法来访问表格的不同维度。
我有这段代码
datasettable = addmargins(
table(dataset[c('observer','condition','stimulus1', 'stimulus2','response')]),
4, FUN = sum)
我按以下方式访问它:
datasettable[,'u',1,'sum',]
然而,我觉得这样访问它有些令人困惑。因为不同维度的索引用逗号分隔,所以很容易混淆单独维度的索引。
有没有办法按名称定义不同维度的索引(对于数字索引尤为重要),例如
datasettable ['obsever'=='ALL','condition'=='u',
'stimulus1'==1, 'stimulus2'=='sum','response'=='ALL']
答案 0 :(得分:2)
我会补充一些数据(提示:包含您自己的数据可以帮助您获得更好的答案; dput
可以成为一个很好的工具。)
dataset <- expand.grid(observer=LETTERS[1:3], condition=c("u","v"),
stimulus1=1:2, stimulus2=1:2)
set.seed(5)
dataset$response <- sample(1:4, nrow(dataset), replace=TRUE)
datasettable <- addmargins(table(dataset), 4, FUN = sum)
你的建议是:
> datasettable[,'u',1,'sum',]
response
observer 1 2 3 4
A 1 1 0 0
B 0 0 2 0
C 0 1 0 1
我可能会在没有先转换到表格的情况下获得总数,可能使用reshape
包,如下所示:
> library(reshape)
> dw <- cast(dataset, condition + stimulus1 + observer ~ response,
fun.aggregate=length, value="stimulus2")
> subset(dw, condition=="u" & stimulus1==1)
condition stimulus1 observer 1 2 3 4
1 u 1 A 1 1 0 0
2 u 1 B 0 0 2 0
3 u 1 C 0 1 0 1
但要回答你的问题,不,我不认为有一种替代方法可以访问表格的某些部分,但你当然可以构建一个,也许是这样:
tableaccess <- function(tabl, ...) {
d <- list(...)
vv <- c(list(tabl), as.list(rep(TRUE, length(dim(tabl)))))
vv[match(names(d), names(dimnames(datasettable)))+1] <- d
do.call(`[`, vv)
}
结果
> tableaccess(datasettable, condition='u', stimulus1=1, stimulus2='sum')
response
observer 1 2 3 4
A 1 1 0 0
B 0 0 2 0
C 0 1 0 1
答案 1 :(得分:0)
根据您的描述,您可以使用subset
功能:
subset(datasettable, observer == 'ALL' & condition == 'u' &
stimulus1 == 1 & stimulus2 == 'sum' & response == 'ALL')
当然,这假设datasettable
是data.frame
。