在 R 语言中,针对多维数据结构的因子函数( )是什么?

3
这里有一个例子:
像这样的矩阵:
     [,1] [,2]
[1,]    1    4
[2,]    2    3
[3,]    3    2
[4,]    4    1
[5,]    1    4
[6,]    2    3
[7,]    3    2
[8,]    4    1

我希望能够获得类似的技能水平

(1,4) (2,3) (3,2) (4,1)

有没有在R中可用的函数?

如果您只提供呈现矩阵的代码,那将使生活变得更加轻松。 - Joris Meys
3个回答

3
您可以直接使用interaction函数生成因子,例如:
R> d <- matrix(1:10, ncol=2)
R> d
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

然后:
R> v <- interaction(d[,1],d[,2], drop=TRUE)
R> v
[1] 1.6  2.7  3.8  4.9  5.10
Levels: 1.6 2.7 3.8 4.9 5.10
R> class(v)
[1] "factor"

2

可能最简单的方法是将列连接成字符:

> d <- matrix(c(1:4,1:4,4:1,4:1), ncol=2)
> factor(apply(d, 1, paste ,collapse=","))
[1] 1,4 2,3 3,2 4,1 1,4 2,3 3,2 4,1
Levels: 1,4 2,3 3,2 4,1

因子不是数值型的,即使看起来像是数值型。例如,a <- factor(1:2); sum(a) 不能运行。那么最好是展示你想用因子做什么。还有其他的方法。 - kohske
抱歉,我理解错了。实际上,我仍然需要因子是多维的,因为我需要它们进行分离操作。 - iano
@kohske 为什么要用 applypaste 就足够了:paste(d[,1],d[,2],sep=",")(而且更快)。 - Marek
@Marek 说得好。这是因为如果列数更多,那么就需要 paste(d[,1], d[,2], d[,3], ........)。我不喜欢这样做。但当然,你是对的。 - kohske
1
你的表述不够清晰。你所说的“levels”是指什么?是指“向量”吗?你想要循环遍历矩阵的行吗?在R语言中,“levels”有特定的含义,这就是为什么人们会谈论因子的原因。 - Spacedman
谢谢大家,我已经通过@kohske的回答找到了解决问题的方法。 - iano

2

或者,您可以直接使用factor()函数:

> d <- rbind(c(1,3),c(2,3),c(3,2),c(4,1),c(1,3))  
> factor(d[,1]):factor(d[,2])  
[1] 1:3 2:3 3:2 4:1 1:3  
Levels: 1:1 1:2 1:3 2:1 2:2 2:3 3:1 3:2 3:3 4:1 4:2 4:3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接