我有一张桌子,如下所示:
tab1 <- as.table(matrix(c(8,6,9,0,8,4,0,12,7,10), ncol = 2, byrow = FALSE,
dimnames = list(site = c("beta", "alpha", "gamma", "theta", "delta"),
count = c("low", "high"))))
> tab1
count
site low high
beta 8 4
alpha 6 0
gamma 9 12
theta 0 7
delta 8 10
以及将网站名称映射到siteID的data.frame:
data.frame(site = c("alpha", "beta", "gamma", "delta", "theta"), siteId = c(1102, 3154, 9000, 1101, 1103))
site siteId
1 alpha 1102
2 beta 3154
3 gamma 9000
4 delta 1101
5 theta 1103
最后,我有一个data.frame,其中包含这些siteID和其他一些变量:
data.frame(siteId = c(1101, 1102, 1103, 3154, 9000), treatment = c("A", "B", "C", "E", "F"))
siteId treatment
1 1101 A
2 1102 B
3 1103 C
4 3154 E
5 9000 F
我需要做的就是以对tab1中的行进行排序的相同方式对最后一个数据帧中的列进行排序,因此它应该产生:
siteId treatment
1 3154 E
2 1102 B
3 9000 F
4 1003 C
5 1001 A
在不进行复杂循环的情况下该如何做?实际的数据集非常大,因此循环将比我想要的花费更多的时间。
您可以通过查看match
不同数据帧中的ID来做到这一点。顺便说一下,我将epsilon
数据框更改a
为theta
,因为其中没有epsilon tab1
。
tab1 <- as.table(matrix(c(8,6,9,0,8,4,0,12,7,10), ncol = 2, byrow = FALSE,
dimnames = list(site = c("beta", "alpha", "gamma", "theta", "delta"),
count = c("low", "high"))))
a = data.frame(site = c("alpha", "beta", "gamma", "delta", "theta"), siteId = c(1102, 3154, 9000, 1101, 1103))
b = data.frame(siteId = c(1101, 1102, 1103, 3154, 9000), treatment = c("A", "B", "C", "E", "F"))
# put a in the order of tab1
a = a[match(a$site,rownames(tab1)),]
# put b in order of a
b = b[match(a$siteId, b$siteId),]
> b
# siteId treatment
#4 3154 E
#2 1102 B
#5 9000 F
#3 1103 C
#1 1101 A
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句