如何更改未命名的第一列中的值

时间:2019-06-25 17:23:36

标签: r

如果read_csv返回的矩阵中没有标题,如何更改第一列的条目?

我的变量当前如下所示:

                     PostFC       C1Mean
WBGene00001816 2.475268e-01   415.694457
WBGene00001817 4.808575e+00  2451.018711

,我想将WBGene0000XXXX重命名为XXXX

3 个答案:

答案 0 :(得分:2)

如果第一列实际上是行名,请执行以下操作

rownames(data) <- gsub(pattern = "WBGene0000", replacement = "", x = rownames(data))

如果不一致,则可能需要考虑使用Stringr软件包并使用substr函数

但是,如果它实际上是一个没有标题列的向量,那么在不知道数据结构的情况下,我不知道如何引用它。

运行数据集的str函数,然后查看返回的结果。或做以下测试

 colnames(data)[1] <- "test" 

在我们知道您如何使用“零长度”变量名称之前,无法完全提供帮助

答案 1 :(得分:2)

如果我正确地理解了您的问题,那么您描述的第一个“未命名”列就是行名,实际上不在您的data.frame中。

# Example data 
df = data.frame(PostFC = c(2.475268e-01, 4.808575e+00), C1Mean = c(415.694457, 2451.018711) )
rownames(df) = c("WBGene00001816", "WBGene00001817")
df
# PostFC    C1Mean
# WBGene00001816 0.2475268  415.6945
# WBGene00001817 4.8085750 2451.0187

# change rownames
rownames(df) = c("rowname1", "rowname2")
df
# PostFC    C1Mean
# rowname1 0.2475268  415.6945
# rowname2 4.8085750 2451.0187

答案 2 :(得分:1)

寻址的条目实际上是行名。我们可以使用rownames(.)访问它们。

rownames(df1)
# [1] "WBGene00001816" "WBGene00001817" "WBGene00001818" "WBGene00001819"
# [5] "WBGene00001820" "WBGene00001821" "WBGene00001822"

在R中也实现了rownames<-,即我们可以通过执行rownames(.) <- c(.)来分配新的行名。

现在,就您而言,如果您只想保留最后四位数字。我们可以在这里使用substring,告诉我们应该从哪个数字中提取出来。在我们的情况下,它是最后一个11位的数字,所以我们这样做:

rownames(df1) <- substring(rownames(df1), 11)
df1
#           PostFC     C1Mean
# 1816  0.36250598  2.1073145
# 1817  0.51068402  0.4186838
# 1818 -0.96837330 -0.7239156
# 1819  0.02331745 -0.5902216
# 1820 -0.56927945  1.7540356
# 1821 -0.51252943  0.1343385
# 1822  0.47263180  1.4366233

请注意,不允许重复的行名,即,如果使用此方法获得重复的行名,则会产生错误。

使用的数据

df1 <- structure(list(PostFC = c(0.362505982864934, 0.510684020059692, 
-0.968373302351162, 0.0233174467410604, -0.56927945273647, -0.512529427359891, 
0.472631804850333), C1Mean = c(2.10731450148575, 0.418683823183885, 
-0.723915648073638, -0.590221641040516, 1.75403562218217, 0.134338480077884, 
1.43662329542089)), class = "data.frame", row.names = c("1816", 
"1817", "1818", "1819", "1820", "1821", "1822"))