将一列设置为行 ID 然后将其删除的问题

问题描述

我有一个简单的问题,但我不知道如何解决它。我有一个这样的数据框:

structure(list(ID = c(1006332,1010660,1012960,1013515,1014490),ave_ocean = c(1,0),ave_price_per_sqft = c(1419.69,912.18,600.74,673.8725,439.46),ave_year = c(2005,2009,1986.4,2006.25,1983),ave_DOM = c(7,10,36.1,10.5,104),total_num_sold = c(1L,1L,10L,4L,1L)),row.names = c(NA,-5L),class = c("tbl_df","tbl","data.frame"))

                         ID ave_ocean ave_price_per_sqft ave_year ave_DOM total_num_sold
                       <dbl>     <dbl>              <dbl>    <dbl>   <dbl>          <int>
1                    1006332         1              1420.    2005      7                1
2                    1010660         0               912.    2009     10                1
3                    1012960         0               601.    1986.    36.1             10
4                    1013515         0               674.    2006.    10.5              4
5                    1014490         0               439.    1983    104                1

我想将列 ID 设置为行名称,然后将其删除。我使用下面的代码

row.names(data) <- data$ID
data <-data[,-c(1)]

当我运行它时,它首先更改行名称并将其替换为 ID,但是一旦我运行第二行以删除“ID”列,它会将行名称更改为普通行名称!任何的想法?任何替代解决方案?

解决方法

tibble::column_to_rownames(df,"ID")

阅读文档(第一句)?tibble::column_to_rownames,还要注意返回值是 data.frame 因为这个原因。

,

第一行设置了行名,但您将无法看到它,因为您有一个小标题。

row.names(data) <- data$ID

#$Warning message:
#Setting row names on a tibble is deprecated. 
data
# A tibble: 5 x 6
#       ID ave_ocean ave_price_per_sqft ave_year ave_DOM total_num_sold
#*   <dbl>     <dbl>              <dbl>    <dbl>   <dbl>          <int>
#1 1006332         1              1420.    2005      7                1
#2 1010660         0               912.    2009     10                1
#3 1012960         0               601.    1986.    36.1             10
#4 1013515         0               674.    2006.    10.5              4
#5 1014490         0               439.    1983    104                1

如果您将数据更改为数据框,您将看到行名。

data <- data.frame(data)
df

#             ID ave_ocean ave_price_per_sqft ave_year ave_DOM total_num_sold
#1006332 1006332         1          1419.6900  2005.00     7.0              1
#1010660 1010660         0           912.1800  2009.00    10.0              1
#1012960 1012960         0           600.7400  1986.40    36.1             10
#1013515 1013515         0           673.8725  2006.25    10.5              4
#1014490 1014490         0           439.4600  1983.00   104.0              1