我有一个数据库,其中针对两个任务条件有几个不同的情绪变量,例如:
ID Cond1_sad Cond1_anxious Cond1_happy Cond2_sad Cond2_anxious Cond2_happy
1 C_01 1 7 4 1 3 2
2 C_02 3 6 4 4 6 5
3 C_03 8 6 5 3 4 4
4 C_04 4 5 5 6 8 6
5 C_05 6 4 3 2 6 3
6 C_06 1 4 2 8 1 4
我需要根据条件堆叠,但将情绪变量保留在单独的列中。例如:
ID Condition Sad Anxious Happy
1 C_01 1 1 7 4
2 C_02 1 3 6 4
3 C_03 1 8 6 5
4 C_04 1 4 5 5
5 C_05 1 6 4 3
6 C_06 1 1 4 2
7 C_01 2 1 3 2
8 C_02 2 4 6 5
9 C_03 2 3 4 4
10 C_04 2 6 8 6
11 C_05 2 2 6 3
12 C_06 2 8 1 4
我尝试了各种堆叠数据的选项(例如,熔化它们),但最终所有变量都堆叠在一起。有更好的解决方案吗?
非常感谢。
最佳答案
这是在 tidyverse 中执行此操作的一种方法。这应该比通过索引指定列位置更灵活一些。
library(dplyr)
library(tidyr)
library(janitor)
df %>%
pivot_longer(-ID, names_to = c("Condition", "Emotion"),
values_to = "Value", names_sep = "_", names_prefix = "Cond",
names_transform = list(Condition = as.integer)) %>%
pivot_wider(names_from = "Emotion", values_from = "Value") %>%
arrange(Condition, ID) %>%
clean_names("title")
# # A tibble: 12 x 5
# ID Condition Sad Anxious Happy
# <chr> <int> <int> <int> <int>
# 1 C_01 1 1 7 4
# 2 C_02 1 3 6 4
# 3 C_03 1 8 6 5
# 4 C_04 1 4 5 5
# 5 C_05 1 6 4 3
# 6 C_06 1 1 4 2
# 7 C_01 2 1 3 2
# 8 C_02 2 4 6 5
# 9 C_03 2 3 4 4
# 10 C_04 2 6 8 6
# 11 C_05 2 2 6 3
# 12 C_06 2 8 1 4
关于r - 在 R 中按条件堆叠多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69914276/