如何将列从 tibble 转换为 row.names

How to convert a column to row.names from a tibble

这是我的数据集 entrepreneur 的样本(通常是 15 x 17),从 Excel 导入 read_excel:

structure(list(Factors = c("Competition", "Cultural Support", "Financing", "High Growth", "Human Capital"), `Baden-Württemberg` = c("0.71", "0.66", "0.81", "0.62", "0.46"), Bayern =c("0.67", "0.66", "0.83", "0.77", "0.49"), Berlin = c("1.00", "0.56", "0.90", "0.82", "0.79"), Brandenburg = c("1.00", "0.55", "0.64", "1.00", "0.77")), row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame"))

或采用这种格式:

EntrepreneurIndex
# A tibble: 5 x 5
  Factors          `Baden-Württemberg` Bayern Berlin Brandenburg
  <chr>            <chr>               <chr>  <chr>  <chr>      
1 Competition      0.71                0.67   1.00   1.00       
2 Cultural Support 0.66                0.66   0.56   0.55       
3 Financing        0.81                0.83   0.90   0.64       
4 High Growth      0.62                0.77   0.82   1.00       
5 Human Capital    0.46                0.49   0.79   0.77   

如您所见,第一列包含我的因子变量。我想将第一列转移到行名。我使用了像

这样的代码
rownames(entrepreneur)  <- entrepreneur[,1]

,导致了`.rowNamesDF<-`(x, value = value) : non-valid 'row.names' length Zusätzlich: Warnmeldung: Setting row names on a tibble is deprecated.

中的报错信息error

不幸的是,我对 tibbles 的概念还很陌生。 我已经尝试将数据转换为数据框,正如另一个 post 所建议的那样 as.data.frame(entrepreneur),但这只会导致与以前相同的错误消息。

要去 https://tibble.tidyverse.org/reference/rownames.html 建议我使用

column_to_rownames(entrepreneur, var = "Factors")

这没有导致错误,但它没有将第一列转换为行名。

阅读建议和其他 post 之后,我现在不确定您是否可以将 tibble 的第一列转移到行名称列中。如果可能的话,我最好让第一列有一个行名以供进一步分析(回归等)。

您可以像这样设置行名:

rownames(entrepreneur) <- entrepreneur$Factors

但是,如果您计划对每一行中的数据进行 运行 宁回归,而不是设置行名称,您可能想要研究如何制作嵌套的小标题——基本上,小标题在哪里一排由小标题组成(小标题中的小标题!)。然后,您可以使用 purrr::map() 在这些嵌套的 tibble 上迭代函数,例如运行 对每一行数据进行回归并将结果全部集中在一个小标题中。

您可以在此处阅读有关嵌套小标题的更多信息:https://tidyr.tidyverse.org/articles/nest.html

首先可以看出区别

> str(entrepreneur[, 1])
tibble [5 x 1] (S3: tbl_df/tbl/data.frame)
 $ Factors: chr [1:5] "Competition" "Cultural Support" "Financing" "High Growth" ...      

> str(entrepreneur[[1]])
 chr [1:5] "Competition" "Cultural Support" "Financing" "High Growth" ...

试试下面的代码(使用 entrepreneur[[1]] 而不是 entrepreneur[,1]

> `rownames<-`(as.data.frame(entrepreneur[-1]), entrepreneur[[1]])
                 Baden-Wⁿrttemberg Bayern Berlin Brandenburg
Competition                   0.71   0.67   1.00        1.00
Cultural Support              0.66   0.66   0.56        0.55
Financing                     0.81   0.83   0.90        0.64
High Growth                   0.62   0.77   0.82        1.00
Human Capital                 0.46   0.49   0.79        0.77