如何将表值转换为列标题

时间:2019-10-12 06:36:02

标签: r

我正在尝试处理我的数据,以使每一列中的值成为列标题,而这些列中的每一列的值都是其先前的列名。

我的表可以用以下代码生成:

library(tidyverse)
df <- tibble("#" = c(1,2,3),
             "1" = c("a","a","b"), 
             "2" = c("b","b","c"), 
             "3" = c("c","c","a"))

我当前的表格如下:

# 1 2 3
1 a b c
2 a b c
3 b c a

我希望它看起来像这样:

# a b c
1 1 2 3
2 1 2 3
3 3 1 2

1 个答案:

答案 0 :(得分:0)

您可以将order应用于tibble的每一行:

## new column names
names(df) <- c("#", sort(unlist(df[1, -1], use.names = FALSE)))

## apply order to each row of df
df[, -1] <- t(apply(df[, -1], 1, order))

df
#> # A tibble: 3 x 4
#>     `#`     a     b     c
#>   <dbl> <int> <int> <int>
#> 1     1     1     2     3
#> 2     2     1     2     3
#> 3     3     3     1     2

免责声明:这假设每一行都包含所有可用变量的置换。如果不是这种情况(例如,一行中的字母a两倍),则将问题分配给每一列。