如何在R中将2列转换为2行?

时间:2019-05-10 18:04:37

标签: r

我有一个2列数据框,我想改为2行。维度是40个观测值和2个变量(而我想要的是40个变量和1个观测值,因为我希望第一行成为列标题)。

我尝试使用重塑,但由于不断出错,我似乎无法正确处理。这是我正在使用的数据框:

      Data.Label                      Test2
1     Family                          Petromyzontidae - lampreys
2     Species                         Ichthyomyzon castaneus
3     Taxonomic Authority             Girard, 1858
4     Common Name(s)                  Chestnut Lamprey
5     French Name                     lamproie brune
6     OMNR Code                       016
Test5 <- reshape(Test4, timevar = Test4$Data.Label, idvar = Test4$Test2,direction = "wide")
Error in `[.data.frame`(data, , idvar) : undefined columns selected

如上所述,我尝试使用重塑。因为有40个变量希望成为列标题(Test4 $ Data.Label),所以我不想为idvars写出每个变量。还有另一种方法吗?

所需的结果将是:

Family                     Species                Taxonomic Authority                Common Name(s)                French Name                OMNR Code                      
Petromyzontidae lampreys   Ichthyomyzon castaneus  Girard, 1858                      Chestnut Lamprey             lamproie brune              016

通过这种方式,Test4 $ Data.Label列成为列标题(总共40个),而Test4 $ Test2列成为第一行。

1 个答案:

答案 0 :(得分:1)

可以选择deframe并转换为list

library(tidyverse)
deframe(df1) %>%
      as.list %>% 
      as_tibble
# A tibble: 1 x 6
#  Family                   Species              `Taxonomic Authorit… `Common Name(s)` `French Name` `OMNR Code`
#  <chr>                    <chr>                <chr>                <chr>            <chr>         <chr>      
#1 Petromyzontidae - lampr… Ichthyomyzon castan… Girard, 1858         Chestnut Lamprey lamproie bru… 016      

数据

df1 <- structure(list(Data.Label = c("Family", "Species",
"Taxonomic Authority", 
"Common Name(s)", "French Name", "OMNR Code"), 
 Test2 = c("Petromyzontidae - lampreys", 
"Ichthyomyzon castaneus", "Girard, 1858", "Chestnut Lamprey", 
"lamproie brune", "016")), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))