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")
总体上是代码的新手,已经经历了数百次 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")