设置'row.names'时的非唯一值 - 只是忽略?

时间:2014-05-09 13:48:20

标签: r

有什么办法可以忽略这一点吗?我可以为不同的行添加相同的行名称。如果不可能有任何方法只将额外的“.2”添加到重复的行中吗?

2 个答案:

答案 0 :(得分:3)

您可以修改名称,使其唯一。这是一个例子:

x <- c(rep(1,5), 2, 3, 4, rep(5, 2), 1)
x
## [1] 1 1 1 1 1 2 3 4 5 5 1

您可以使用ave创建消除歧义的矢量:

ave(x, x, FUN=function(i) seq(length(i)))
## [1] 1 2 3 4 5 1 1 1 1 2 6

将其粘贴到x中的值,并且您有唯一的值:

paste(x, ave(x, x, FUN=function(i) seq(length(i))), sep='.')
##  [1] "1.1" "1.2" "1.3" "1.4" "1.5" "2.1" "3.1" "4.1" "5.1" "5.2" "1.6"

答案 1 :(得分:1)

一般情况下,如果需要,可以将rownames设置为重复项,请参阅例如

m <- matrix(1:9,3,3)
rownames(m) <- c(1,1,1)
m
  [,1] [,2] [,3]
#1    1    4    7
#1    2    5    8
#1    3    6    9

我不确定为什么不允许使用data.frames,例如

d <- data.frame(x=1:10,y=letters[1:10])
rownames(d) <- rep(letters[1:5],2)
#Error in `row.names<-.data.frame`(`*tmp*`, value = value) : 
#  duplicate 'row.names' are not allowed
#In addition: Warning message:
#non-unique values when setting 'row.names': ‘a’, ‘b’, ‘c’, ‘d’, ‘e’ 

举例说明您正在考虑的对象类型可能会产生更具体的答案。