r - 在 R 中按条件堆叠多列

标签 r

我有一个数据库,其中针对两个任务条件有几个不同的情绪变量,例如:

   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/

相关文章:

r - 用R求解非平方线性系统

R:分区排列的高效计算

r - 在 R 中使用 .mids 对象创建训练数据集

r - R&xml2:通过特定的文本值定位元素,将所有子值存储在data.frame中

r - 如何使用 Illustrator 调整 R 中生成的 pdf 图形的大小

r - 从数据框制作维恩图

r - 如何从 R 脚本通过电子邮件发送自己的数据?

r - 使用docker时如何运行带有入口点的Rscript?

r - 将参数传递给 dplyr 函数

r - 对 r 中具有特定条件的行求和