R语言 如何转置排名数据并将单元格名称转换为列名?

5vf7fwbs  于 2023-06-03  发布在  其他
关注(0)|答案(1)|浏览(273)

我在LimeSurvey中收集了一些排名数据。数据如下所示:
X1、X2... X9是项目的排名方式。

structure(list(id = c(1L, 2L, 3L, 4L, 5L, 7L), X1 = c("Parque Arví", 
"Parque Explora", "Jardín Botánico", "Parque Explora", "Parque Arví", 
"Parque Arví"), X2 = c("Jardín Botánico", "Jardín Botánico", 
"Parque Explora", "Jardín Botánico", "Parques del Río", "Jardín Botánico"
), X3 = c("Parques del Río", "Parque Arví", "Parque natural Cerro Volador", 
"Parques del Río", "Jardín Botánico", "Parque de los Pies Descalzos"
), X4 = c("Parque de los Pies Descalzos", "Parque natural Cerro Volador", 
"Parque Arví", "Parque Norte", "Parque Llerás", "Parque Explora"
), X5 = c("Parque de la Luz", "Parque Llerás", "Parque Norte", 
"Parque natural Cerro Volador", "Parque Norte", "Parque natural Cerro Volador"
), X6 = c("Parque Explora", "Parque de los Pies Descalzos", "Parques del Río", 
"Parque de la Luz", "Parque Explora", "Parques del Río"), X7 = c("Parque natural Cerro Volador", 
"Parque Norte", "Parque de los Pies Descalzos", "Parque de los Pies Descalzos", 
"Parque de la Luz", "Parque de la Luz"), X8 = c("Parque Norte", 
"Parques del Río", "Parque de la Luz", "Parque Arví", "Parque de los Pies Descalzos", 
"Parque Norte"), X9 = c("Parque Llerás", "Parque de la Luz", 
"Parque Llerás", "Parque Llerás", "Parque natural Cerro Volador", 
"Parque Llerás")), class = "data.frame", row.names = c(NA, -6L
))

如何将原始数据框中的数据单元格值转换为列名。转置后的dataframe应该看起来像这样:

structure(list(id = c(1L, 2L, 3L, 4L, 5L, 7L), Jardín.Botánico = c(2L, 
2L, 1L, 2L, 3L, 2L), Parque.Arví = c(1L, 3L, 4L, 8L, 1L, 1L), 
    Parque.de.la.Luz = c(5L, 9L, 8L, 6L, 7L, 7L), Parque.de.los.Pies.Descalzos = c(4L, 
    6L, 7L, 7L, 8L, 3L), Parque.Explora = c(6L, 1L, 2L, 1L, 6L, 
    4L), Parque.Llerás = c(9L, 5L, 9L, 9L, 4L, 9L), Parque.natural.Cerro.Volador = c(7L, 
    4L, 3L, 5L, 9L, 5L), Parque.Norte = c(8L, 7L, 5L, 4L, 5L, 
    8L), Parques.del.Río = c(3L, 8L, 6L, 3L, 2L, 6L)), class = "data.frame", row.names = c(NA, 
-6L))

我找到了这个答案,但解决方案没有显示列名,只有V1,V2,V3等。Analyzing LimeSurvey ranking data in R

ghhkc1vu

ghhkc1vu1#

使用tidyr,旋转更长的时间,然后回到wide,交换值和名称。当旋转到long时,使用names_prefix()参数删除X s,并使用names_transform转换为整数。

library(tidyr)

dat %>% 
  pivot_longer(
    X1:X9, 
    names_prefix = "X", 
    names_transform = as.integer
  ) %>% 
  pivot_wider(names_from = value, values_from = name)
# A tibble: 6 × 10
     id `Parque Arví` `Jardín Botánico` `Parques del Río` Parque de los Pies D…¹
  <int>         <int>             <int>             <int>                  <int>
1     1             1                 2                 3                      4
2     2             3                 2                 8                      6
3     3             4                 1                 6                      7
4     4             8                 2                 3                      7
5     5             1                 3                 2                      8
6     7             1                 2                 6                      3
# ℹ abbreviated name: ¹​`Parque de los Pies Descalzos`
# ℹ 5 more variables: `Parque de la Luz` <int>, `Parque Explora` <int>,
#   `Parque natural Cerro Volador` <int>, `Parque Norte` <int>,
#   `Parque Llerás` <int>

相关问题