R:将sav(SPSS)数据转换为适合HH::likert的格式

5w9g7ksd  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(118)

我正在尝试将sav(SPSS)数据文件中的数据转换为适合HH::likert绘图的格式,但无法获得正确的调用来完成此操作。
为了复制sav格式,创建一个 Dataframe ,给出7个回答者回答的关于从1(非常喜欢)到5(非常不喜欢)对特定奶酪评级的likert问题的结果:

cheeses<-tribble(
  ~Cheddar, ~Brie, ~Stilton,
  1, 4, 2, 
  2, 4, 1,
  1, 1, 3,
  4, 1, 5,
  3, 2, 4,
  5, 3, 1,
  1, 5, 2
)

旋转更长的时间并不能得到HH::Likert可以使用的 Dataframe -它可以绘图,但图表只是比较评级与n(编号):

cheeseslong<-cheeses %>% 
  pivot_longer(everything(), names_to = "question", values_to = "rating") %>%
  count(question, rating) %>% 
  group_by(question, rating)

数据需要采用以下格式,即每种奶酪的每个评级的响应总数:

cheeseslikert<-tribble(
  ~Question, ~"Strongly like", ~Like, ~Unsure, ~Dislike, ~"Strongly dislike",
  "Cheddar", 3, 1, 1, 1, 1,
  "Brie", 2, 1, 1, 2, 1,
  "Stilton", 2, 2, 0, 0, 3
)

然后,我们可以很好地绘制利克特图:

HH::likert(Question~.,
           cheeseslikert,
           positive.order=TRUE,
           as.percent = TRUE,
           main="Cheese preferences.",
           xlab="percentage",
           ylab=""
)

所以我的问题是:应该使用什么命令将数据从"cheeses"格式移动到"cheeseslikert"格式?理想情况下,我希望使用tidyverse解决方案,但使用base R解决方案也可以。

gfttwv5a

gfttwv5a1#

pivot_longer之后需要pivot_wider(并在第一个透视之前或之后引入标签):

library(tidyverse)

cheeses<-tribble(
  ~Cheddar, ~Brie, ~Stilton,
  1, 4, 2, 
  2, 4, 1,
  1, 1, 3,
  4, 1, 5,
  3, 2, 4,
  5, 3, 1,
  1, 5, 2
)

cheeseslikert <- cheeses |>
  mutate(across(
    everything(),
    factor,
    labels = c("Strongly like", "Like", "Unsure", "Dislike", "Strongly dislike")
  )) |>
  pivot_longer(everything(), names_to = "question", values_to = "rating") |>
  count(question, rating) |>
  pivot_wider(names_from = rating, values_from = n)

HH::likert(
  question ~ .,
  cheeseslikert,
  positive.order = TRUE,
  as.percent = TRUE,
  main = "Cheese preferences.",
  xlab = "percentage",
  ylab = ""
)

相关问题