将第一列设置为行名,尽管有重复
Set first column as rowname, in spite of duplicates
sample
Symobls IDs Value1 Value2 Value3
1 NA NA 3.1 2.3 1.7
2 TP53 1234 5.8 6.9 10.1
3 Kras 5678 0.1 0.3 0.5
4 NA NA 10.3 2.1 7.9
5 Hras 9991 20.0 30.0 40.0
6 TP53 1234 -3.1 0.2 1.7
我的 table 看起来像这个。
我需要按行或列计算值。
所以,我尝试使用符号作为新的行名。这样,我可以使用 sample["Hras"] 计算整行值
尝试这样做时,我遇到了这个问题。
rownames(sample)<-sample[,1]
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': ‘A1CF’, ‘A2M’, ‘A2ML1’, ‘AAGAB’, ‘AAK1’, ‘AAMDC’, ‘AARS2’, ‘AASDH’, ‘AASDHPPT’, ‘AASS’, ‘ABAT’, ‘ABCA1’, ‘ABCA13’, ‘ABCA2’, ‘ABCA4’, ‘ABCA5’, ‘ABCA8’, ‘ABCA9’, ‘ABCB1’, ‘ABCB11’, ‘ABCB4’, ‘ABCB5’, ‘ABCB6’, ‘ABCB8’, ‘ABCB9’, ‘ABCC1’, ‘ABCC10’, ‘ABCC11’, ‘ABCC12’, ‘ABCC13’, ‘ABCC3’, ‘ABCC4’, ‘ABCC5’, ‘ABCC6’, ‘ABCC8’, ‘ABCC9’, ‘ABCD3’, ‘ABCD4’, ‘ABCE1’, ‘ABCF2’, ‘ABCG1’, ‘ABHD1’, ‘ABHD10’, ‘ABHD11’, ‘ABHD12’, ‘ABHD13’, ‘ABHD17B’, ‘ABHD2’, ‘ABHD5’, ‘ABHD6’, ‘ABI1’, ‘ABI2’, ‘ABI3BP’, ‘ABL2’, ‘ABLIM1’, ‘ABLIM2’, ‘ABO’, ‘ABR’, ‘ABRA’, ‘ABTB1’, ‘ABTB2’, ‘ACAA1’, ‘ACAA2’, ‘ACACA’, ‘ACACB’, ‘ACAD10’, ‘ACADL’, ‘ACADSB’, ‘ACAN’, ‘ACAP1’, ‘ACAP2’, ‘ACAP3’, ‘ACAT1’, �� [... truncated]
这是因为"NA"吗?其他选择?
谢谢
这是一个微阵列数据集。我已经完成标准化并打算提取几个基因的值来执行绘图、互相关和 t 检验。事实上,不仅 NA,而且我将用于绘制图形的几个基因都有多行。所以,我需要将它们提取到另一个 table 中以备后用。
在这里,我只是回答您在问题中要求的一种更改row.names
的方法。最终目标不明确。对于指定的问题,您可以尝试使用 make.names
和选项 unique=TRUE
。这将确保重复的名称不同。在第一列中,有 NA
个值,它们将被命名为 NA.
、NA..1
等。(如果您愿意的话)。
row.names(sample) <- make.names(sample[,1],TRUE)
或如@Richard Scriven 所评论,
row.names(sample) <- paste(make.unique(df[,1]))
另一种选择是将 data.frame
转换为 matrix
(这将允许重复值)。仅当 columns
与 class 相同时,我才推荐这样做。例如,如果您有 character
和 numeric
列,这会将所有列转换为 character
class。在您的数据集中,在我看来,除了第一列外,所有其他列都是数字( "IDs" 列可能除外)。但是 NA
值又是一个问题。如果您想根据行名对“第一”或“第三”行进行子集化,这将很困难。
sample1 <- as.matrix(sample[,-1])
row.names(sample1) <- sample[,1]
sample1['Hras',]
# IDs Value1 Value2 Value3
# 9991 20 30 40
sample
Symobls IDs Value1 Value2 Value3
1 NA NA 3.1 2.3 1.7
2 TP53 1234 5.8 6.9 10.1
3 Kras 5678 0.1 0.3 0.5
4 NA NA 10.3 2.1 7.9
5 Hras 9991 20.0 30.0 40.0
6 TP53 1234 -3.1 0.2 1.7
我的 table 看起来像这个。 我需要按行或列计算值。 所以,我尝试使用符号作为新的行名。这样,我可以使用 sample["Hras"] 计算整行值 尝试这样做时,我遇到了这个问题。
rownames(sample)<-sample[,1]
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': ‘A1CF’, ‘A2M’, ‘A2ML1’, ‘AAGAB’, ‘AAK1’, ‘AAMDC’, ‘AARS2’, ‘AASDH’, ‘AASDHPPT’, ‘AASS’, ‘ABAT’, ‘ABCA1’, ‘ABCA13’, ‘ABCA2’, ‘ABCA4’, ‘ABCA5’, ‘ABCA8’, ‘ABCA9’, ‘ABCB1’, ‘ABCB11’, ‘ABCB4’, ‘ABCB5’, ‘ABCB6’, ‘ABCB8’, ‘ABCB9’, ‘ABCC1’, ‘ABCC10’, ‘ABCC11’, ‘ABCC12’, ‘ABCC13’, ‘ABCC3’, ‘ABCC4’, ‘ABCC5’, ‘ABCC6’, ‘ABCC8’, ‘ABCC9’, ‘ABCD3’, ‘ABCD4’, ‘ABCE1’, ‘ABCF2’, ‘ABCG1’, ‘ABHD1’, ‘ABHD10’, ‘ABHD11’, ‘ABHD12’, ‘ABHD13’, ‘ABHD17B’, ‘ABHD2’, ‘ABHD5’, ‘ABHD6’, ‘ABI1’, ‘ABI2’, ‘ABI3BP’, ‘ABL2’, ‘ABLIM1’, ‘ABLIM2’, ‘ABO’, ‘ABR’, ‘ABRA’, ‘ABTB1’, ‘ABTB2’, ‘ACAA1’, ‘ACAA2’, ‘ACACA’, ‘ACACB’, ‘ACAD10’, ‘ACADL’, ‘ACADSB’, ‘ACAN’, ‘ACAP1’, ‘ACAP2’, ‘ACAP3’, ‘ACAT1’, �� [... truncated]
这是因为"NA"吗?其他选择? 谢谢
这是一个微阵列数据集。我已经完成标准化并打算提取几个基因的值来执行绘图、互相关和 t 检验。事实上,不仅 NA,而且我将用于绘制图形的几个基因都有多行。所以,我需要将它们提取到另一个 table 中以备后用。
在这里,我只是回答您在问题中要求的一种更改row.names
的方法。最终目标不明确。对于指定的问题,您可以尝试使用 make.names
和选项 unique=TRUE
。这将确保重复的名称不同。在第一列中,有 NA
个值,它们将被命名为 NA.
、NA..1
等。(如果您愿意的话)。
row.names(sample) <- make.names(sample[,1],TRUE)
或如@Richard Scriven 所评论,
row.names(sample) <- paste(make.unique(df[,1]))
另一种选择是将 data.frame
转换为 matrix
(这将允许重复值)。仅当 columns
与 class 相同时,我才推荐这样做。例如,如果您有 character
和 numeric
列,这会将所有列转换为 character
class。在您的数据集中,在我看来,除了第一列外,所有其他列都是数字( "IDs" 列可能除外)。但是 NA
值又是一个问题。如果您想根据行名对“第一”或“第三”行进行子集化,这将很困难。
sample1 <- as.matrix(sample[,-1])
row.names(sample1) <- sample[,1]
sample1['Hras',]
# IDs Value1 Value2 Value3
# 9991 20 30 40