首页 > 解决方案 > 将行名转换为数据框中的新列

问题描述

如果已经在其他地方问过这个问题,请提前道歉,但我尝试了不同的尝试,但到目前为止没有任何效果。

在我的数据框中Mesure,我想将该列的值拆分 Row.names为两个名为Sample_type和的新列Locality。我尝试使用tidyverse解决方案,但 R 返回我该列不得重复...我该如何修改它?另外,是否可以删除“<”?

> head(Mesure)
            Row.names                mean_Mesure max_Mesure min_Mesure 
1 Aquatic_moss.Paris.AG-110m.<          100         110        90                      
2     Aquatic_moss.Paris.BE-7.          123         177        53                         
3   Aquatic_moss.Paris.CO-57.<          40          60         20            
4   Aquatic_moss.Paris.CO-58.<          40          50         30  
5   Aquatic_moss.Paris.CO-60.<          50          70         30         
6  Aquatic_moss.Paris.CS-134.<          200         300        100      
> 

> library(tidyverse)
> new_df <- Mesure %>% 
+   rownames_to_column(var = "Row.names") %>% 
+   separate(Row.names,sep = ".",into = c("Sample_type","Locality")) 

Error: Column name `Row.names` must not be duplicated.
Run `rlang::last_error()` to see where the error occurred.

标签: rtidyverse

解决方案


要将其与第一个“点”分开,您可以使用:

Mesure %>%
    separate(Row.names, sep = "\\.", into = c("Sample_type", "Locality"), extra = "merge")

解释:

  • 您不需要 convert rownames_to_column(),因为 "Row.names" 已经是一列。
  • sep = "."是不够的,因为.它被视为正则表达式。
  • 列中有很多.,因此您需要指定extra = "merge"仅在第一次出现时进行分隔。如果您只想保留"Paris"没有AG-110metc,请extra = "drop"在此处指定。

结果extra = "merge"

   Sample_type        Locality mean_Mesure max_Mesure min_Mesure
1 Aquatic_moss Paris.AG-110m.<         100        110         90
2 Aquatic_moss     Paris.BE-7.         123        177         53
3 Aquatic_moss   Paris.CO-57.<          40         60         20
4 Aquatic_moss   Paris.CO-58.<          40         50         30
5 Aquatic_moss   Paris.CO-60.<          50         70         30
6 Aquatic_moss  Paris.CS-134.<         200        300        100

结果extra = "drop"

   Sample_type Locality mean_Mesure max_Mesure min_Mesure
1 Aquatic_moss    Paris         100        110         90
2 Aquatic_moss    Paris         123        177         53
3 Aquatic_moss    Paris          40         60         20
4 Aquatic_moss    Paris          40         50         30
5 Aquatic_moss    Paris          50         70         30
6 Aquatic_moss    Paris         200        300        100

如果您需要"<"放在 Locality 列的末尾,请运行以下命令:

Mesure$Locality <- gsub("<$", "", Mesure$Locality)

where"<$"表示“<在字符串的末尾”。


推荐阅读