抱歉,再次提出一些基本问题。
我有六个分类数据列表:
[1] A,B,C,D
[2] C,D,B,A
最后,我希望有一个矩阵,看起来像
[1],[2]
[A] 1,4
[B] 2,3
[C] 3,1
[D] 4,2
这样每列都包含分类数据的排名列表。非常感谢你!
答案 0 :(得分:2)
您的输入数据集
尚不清楚 l1 <- list(LETTERS[1:4], LETTERS[c(3:4, 2:1)])
library(reshape2)
dat1 <- transform(melt(l1), indx=ave(seq_along(value), L1, FUN=seq_along))[,-2]
split(dat1$indx, dat1$value)
# $A
#[1] 1 4
# $B
#[1] 2 3
# $C
#[1] 3 1
# $D
#[1] 4 2
如果您需要矩阵输出
do.call(rbind,split(dat1$indx, dat1$value))
或者您可以使用mapply
res2 <- mapply(match, rep(list(LETTERS[1:4]),length(l1)), l1)
rownames(res2) <- LETTERS[1:4]
res2
# [,1] [,2]
#A 1 4
#B 2 3
#C 3 1
#D 4 2
或使用@alexis_laz提供的sapply
res3 <- sapply(l1, function(x) match(LETTERS[1:4], x))
rownames(res3) <- rownames(res2)
或者,在这种情况下:
sapply(l1, order)
# [,1] [,2]
#[1,] 1 4
#[2,] 2 3
#[3,] 3 1
#[4,] 4 2
答案 1 :(得分:0)
这应该适合你:
a <- c(toupper(letters[1:4]))
b <- c("C","D","B","A")
n <- length(a)
dfs <- list(a, b)
ranks <- rep(list(seq(n)), length(dfs))
for(i in 1:length(ranks)){
names(ranks[[i]]) <- dfs[[i]]
ranks[[i]] <- ranks[[i]][order(names(ranks[[i]]))]
}
sapply(ranks, FUN = function(x) x)