我有一个调查结果的 R 数据框。每列都是对调查中一个问题的回答。它可以取值 1 到 10 和 NA。我想把它变成频率表。
这是我拥有的数据的示例。我假装值是从 1 到 3,而不是 1 到 10。
data.frame(
"Person" = c(1,2,3),
"Question1" = c(NA, "1", "1"),
"Question2" = c("1", "2", "3")
)
我想要的:
data.frame(
"Question" = c("Question1", "Question2"),
"Frequency of 1" = c(2, 1),
"Frequency of 2" = c(0 , 1),
"Frequency of 3" = c(0, 1)
)
我已经尝试使用 likert 包中的 likert(),但我得到的结果是不正确的。这个问题有简单的解决方案吗?
最佳答案
这是一个使用 dplyr 和 purrr 包的解决方案
library(dplyr)
library(purrr)
data.frame(
"Person" = c(1,2,3),
"Question1" = c(NA, "1", "1"),
"Question2" = c("1", "2", "3")
)
df %>%
select(-Person) %>%
mutate_all(~ factor(.x, levels = as.character(1:10) ) %>% addNA() ) %>%
map(table) %>%
transpose() %>%
map(as.integer) %>%
set_names( ~ paste0("Frequency of ",ifelse(is.na(.), "NA", .))) %>%
as_tibble() %>%
mutate(Question = setdiff(names(df),"Person")) %>%
select(Question,everything(), "Frequency of NA" = `Frequency of ` )
关于r - 如何将调查响应的数据框转换为频率表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54613431/