如何在保持元素顺序的同时转置数据框中的列?

问题描述 投票:-1回答:1

enter image description here

您好,我的数据看起来像这样,我需要将其设为矩阵。因此,我运行以下命令:

df2 <- df %>% spread(key = countrybornText, value = permile)

我的问题是,我希望这些列按GDP2012born的顺序排序,并且在我转置时它们按字母顺序显示。知道如何保持我在countrybornText列中的顺序吗?

PD:抱歉,图片我不知道如何正确添加数据样本

r sorting transpose
1个回答
0
投票

您可以确保该列是一个因子,并且其级别按所需顺序排列:

library(dplyr)
library(tidyr)

df$countrybornText <-factor(as.character(df$countrybornText), as.character(df$countrybornText))
df2 <- df %>% spread(key = countrybornText, value = permile)

df2
#>   OECD2012  GDP2012 GDP2012born  countrynew United States Netherlands Ireland
#> 1        1 56149.67    43355.81 Switzerland            NA          NA      NA
#> 2        1 56149.67    44336.81 Switzerland            NA          NA      NA
#> 3        1 56149.67    44551.62 Switzerland            NA          NA      NA
#> 4        1 56149.67    44829.27 Switzerland            NA          NA       1
#> 5        1 56149.67    45948.54 Switzerland            NA           2      NA
#> 6        1 56149.67    50632.44 Switzerland             3          NA      NA
#>   Austria Denmark Sweden
#> 1      NA      NA      1
#> 2      NA       3     NA
#> 3       9      NA     NA
#> 4      NA      NA     NA
#> 5      NA      NA     NA
#> 6      NA      NA     NA

数据:


df <- structure(list(OECD2012 = c(1, 1, 1, 1, 1, 1), GDP2012 = c(56149.67, 
      56149.67, 56149.67, 56149.67, 56149.67, 56149.67), GDP2012born = c(50632.44, 
      45948.54, 44829.27, 44551.62, 44336.81, 43355.81), countrynew = structure(c(1L, 
      1L, 1L, 1L, 1L, 1L), .Label = "Switzerland", class = "factor"), 
      countrybornText = structure(c(6L, 4L, 3L, 1L, 2L, 5L), .Label = c("Austria", 
      "Denmark", "Ireland", "Netherlands", "Sweden", "United States"), 
      class = "factor"), permile = c(3, 2, 1, 9, 3, 1)), class = "data.frame", 
      row.names = c(NA, -6L))

reprex package(v0.3.0)在2020-02-18创建

© www.soinside.com 2019 - 2024. All rights reserved.