问题描述
我有一个包含 4 个变量的多维列联表。我需要使用长度为 4 的向量从该表中获取值。这样做的全部原因是能够获得大量此类向量并从列联表中找到相应的输出。
有没有好办法把c(1,2,3,4)
转换成my.table[1,4]
?
这是我目前仅使用一个向量作为输入所做的示例:
v = c(1,4)
my.table = table(my.data.frame[,c("x","y","z","w")])
eval(str2lang(paste0("my.table[",paste0(v,collapse = ","),"]")))
这就是我对大量输入向量所做的事情,在我的例子中是一个数据框:
data.frame.of.inputs = data.frame(x = sample(1:4,100,T),y = sample(1:4,z = sample(1:4,w = sample(1:4,T))
my.table = table(some.other.data.frame[,"w")])
apply(data.frame.of.inputs,1,function(rw)
eval(str2lang(paste0("my.table[",paste0(rw,"]"))))
注意:要运行此代码,您可以使用相同的语句初始化 my.data.frame
和 some.other.data.frame
:
data.frame(x = sample(1:4,T))
我不喜欢我目前的解决方案,不仅因为它丑陋,还因为它似乎是做一些简单的事情的很长的路。
另外,作为我的一个附带任务:有没有办法通过 attributes(my.table)$variable.name 对表进行子集化?
解决方法
来自?"["
:
当用‘[’索引数组时,单个参数‘i’可以是一个 矩阵的列数与“x”的维数一样多; 结果是一个向量,其元素对应于 'i' 的每一行中的索引集。
使用一个向量:
my.table[rbind(v)]
(即,将向量转换为单行矩阵)
多个输入:
my.table[as.matrix(data.frame.of.inputs)]