我正在尝试处理我的数据,以使每一列中的值成为列标题,而这些列中的每一列的值都是其先前的列名。
我的表可以用以下代码生成:
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
答案 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
两倍),则将问题分配给每一列。