【发布时间】:2012-10-04 15:11:47
【问题描述】:
问题:
使用 R,我有两个数组,都具有相同类型的数据(例如,相同的行、列和/或层名称)。但是,它们具有不同的维度。行和列名称部分重叠。也就是说,大多数级别的行和列因子都出现在两个数组中,但有些是每个数组独有的。我想取其中一个数组,并将其削减,以便仅包含两个数组共有的行和列级别。我以前可以通过编写自己的非常复杂的函数来实现这一点,但看起来这真的应该是一个简单的操作。任何人都可以为我指出正确的方向吗?
这里有一些示例代码,我认为这是一种不必要的费力实现方式。在这种情况下,sp.ixn.core 是一个较小的 2D 数组,我想减少一个 3D 数组,以便行和列与 sp.ixn.core 匹配……最后一点是我仔细检查数字是否加起来正确。
temp=table(data$plant,data$Species,data$jdate)
temp2=array(,dim=c(nrow(sp.ixn.core),ncol(temp),dim(temp)[3]))
for (i in 1:length(rownames(sp.ixn.core))){
temp2[i,,] = temp[rownames(temp) == rownames(sp.ixn.core)[i],,]
}
colnames(temp2) = colnames(temp)
temp3=array(,dim=c(nrow(sp.ixn.core),ncol(sp.ixn.core),dim(temp)[3]))
for (i in 1:length(colnames(sp.ixn.core))){
temp3[,i,] = temp2[,colnames(temp2) == colnames(sp.ixn.core)[i],]
}
dim(temp3)
sp.ixn.core.tbl = temp3
dimnames(sp.ixn.core.tbl)[[3]] = dimnames(temp)[[3]]
dimnames(sp.ixn.core.tbl)[[2]] = colnames(sp.ixn.core)
dimnames(sp.ixn.core.tbl)[[1]] = rownames(sp.ixn.core)
dimnames(sp.ixn.core.tbl)
for (i in 1:nrow(sp.ixn.core)){
if (sum(sp.ixn.core.tbl[i,,]) == rowSums(sp.ixn.core)[i])
print("yes")
}
for (i in 1:ncol(sp.ixn.core)){
if (sum(sp.ixn.core.tbl[,i,]) == colSums(sp.ixn.core)[i])
print("yes")
}
【问题讨论】:
-
你能给我们看一些示例代码吗?
-
除代码外,请提供
dput(sp.ixn.core),我们可以将其剪切并粘贴到浏览器中。 -
您的代码没有运行。你能让你的例子可重现吗? stackoverflow.com/questions/5963269/…