R:将列元素指定为现有数据框中的行名称时,处理非唯一的行名称

R:将列元素指定为现有数据框中的行名称时,处理非唯一的行名称,r,R,我试图将数据集的第一列重新指定为行名称/标题,并将数据框的其余部分作为变量处理。我已经看到了重新分配代码: samp2 <- samp[,-1] rownames(samp2) <- samp[,1] 这给了我一个非唯一名称的错误。我不想合并这些行。我如何实现我的目标,使我的数据框架成为: > samp.with.rownames Var.1 Var.2 Var.3 A 1 5 0 B 2 4 1 C 3

我试图将数据集的第一列重新指定为行名称/标题,并将数据框的其余部分作为变量处理。我已经看到了重新分配代码:

samp2 <- samp[,-1]
rownames(samp2) <- samp[,1]
这给了我一个非唯一名称的错误。我不想合并这些行。我如何实现我的目标,使我的数据框架成为:

> samp.with.rownames 
     Var.1 Var.2 Var.3
A     1     5     0
B     2     4     1
C     3     3     2
A     4     2     3
B     5     1     4
...

正如在注释中已经提到的,在dataframe中不能有重复的行名称,但如果需要,可以将它们放在矩阵中

mat <- matrix(unlist(samp[-1]), ncol = ncol(samp) - 1,
              dimnames = list(samp$names, names(samp[-1])))
mat

#  Var.1 Var.2 Var.3
#A     1     5     0
#B     2     4     1
#C     3     3     2
#A     4     2     3
#B     5     1     4
这里我们使用-1从数据帧中删除第一列

资料


在R中不能有重复的行名称,至少在数据帧中不能有重复的行名称。你可以把你的samp变成一个矩阵,这是有可能的。这样做真的没有意义。数据帧中的每一行都是唯一的观测值,因此它具有唯一的行名称。如果希望能够对数据帧进行子集划分,则更容易做到这一点,方法是保持列的原样,并在需要时按列进行分组。在R中很容易获得,而不必在数据表中使用行名称frame@arg0naut91是的,我想你是对的。我可能得把它矩阵化。@AllanCameron哈哈,你说得对。是的,我实际上首先在数据集上做了子集来进行缩放,并做了一些分析。然后我想要一个PCA,就在那一刻我意识到我确实需要将第一列的ID文本包含回我的绘图中。。。
mat <- matrix(unlist(samp[-1]), ncol = ncol(samp) - 1,
              dimnames = list(samp$names, names(samp[-1])))
mat

#  Var.1 Var.2 Var.3
#A     1     5     0
#B     2     4     1
#C     3     3     2
#A     4     2     3
#B     5     1     4
samp <- structure(list(names = c("A", "B", "C", "A", "B"), Var.1 = 1:5, 
Var.2 = 5:1, Var.3 = 0:4), row.names = c(NA, -5L), class = "data.frame")