R- 从调查数据中熔化列组 - 了解 R(gather) 的工作原理

R- melting groups of columns from survey data -understanding how R(gather) works

总体上是代码的新手,已经经历了数百次 google 搜索和 Whosebug 线程,但还没有真正解释我的解决方案是如何工作的。 有很多方法可以融化数据,大多数都显得过于复杂……很好奇为什么我的解决方案在所有其他解决方案都过于复杂的情况下有效。

原始数据框

> df <- data.frame(
ResponseID = c("123", "1234"),
Q1_W1 = c("Agree", "strongly disagree"),
Q1_W2 = c("disagree", "Agree"),
Q2_W1 = c("Disagree", "Disagree"),
Q2_W2 = c("Agree", "NA")
)

期望的输出

  ResponseID variable value    variable     value
    123       Q1_W1   agree      Q2_W1      disagree     
   1234       Q1_W2   disagree   Q2_W2      agree      

我是通过以下方式实现的:

nalh5=ALH %>% gather(question,response, Q1_W1:Q1_W7)%>%
 gather(q2, r2,Q2_W1:Q2_W3)%>%
 gather(q3, r3, Q3_W1:Q3_W5)

效果很好,但是有没有更有效的方法来实现它?

我想这更干净,但我仍然认为您正在破坏一个已经整洁的数据集。

df %>% 
  pivot_longer(names_to = "Q1_questions",values_to = "Q1_answers",cols = contains("Q1")) %>% 
  pivot_longer(names_to = "Q2_questions",values_to = "Q2_answers",cols = contains("Q2"))

你甚至可以把它变成一个函数

butcher_function <- function(df,Q) {
  names_to_par <- str_c(Q,"questions",sep = "_")
  values_to_par <- str_c(Q,"answers",sep = "_")

  pivot_longer(data = df,
               names_to = names_to_par,
               values_to = values_to_par,
               cols = contains(Q))
}
df %>%
  butcher_function(Q = "Q1") %>%
  butcher_function(Q = "Q2")