r - pivot_longer 与列组

标签 r dplyr

<分区>

我有一个看起来像这样的数据集:

df_start <- tribble(
    ~name,   ~age, ~x1_sn_ctrl1, ~x1_listing2_2, ~x1_affect1, ~x2_sn_ctrl1, ~x1_listing2_2, ~x2_affect1, ~number,
    "John",   28,        1,            1,             9,           4,            5,                9,       6,
    "Paul",   27,        2,            1,             4,           1,            3,                3,       4,
    "Ringo",  31,        3,            1,             2,           2,            5,                8,       9)

在处理列中的分组时,我需要 pivot_longer():

  • 有 2 个 x 值(1 和 2)
  • 每个 x 值有 3 个问题(sn_ctrl1、listing2_2、affect1)

在我的实际数据集中,有 14 个 x。

基本上,我想做的是将 pivot_longer() 应用于 x 值,但保留我的 3 个问题(sn_ctrl1、listing2_2、affect1)。

我想结束的是:

df_end <- tribble(
    ~name, ~age, ~xval, ~sn_ctrl1, ~listing2_2, ~affect1, ~number,
    "John", 28,    1,        1,         1,          9,       6,
    "John", 28,    2,        4,         5,          9,       6,
    "Paul", 27,    1,        2,         1,          4,       4,  
    "Paul", 27,    2,        1,         3,          3,       4, 
    "Ringo", 31,   1,        3,         1,          2,       9, 
    "Ringo", 31,   2,        2,         5,          8,       9)

我在 names_patternpivot_longer 中尝试了 很多 非常不成功的尝试,但我完全失败了。

有人知道如何解决这个问题吗?

谢谢!

PS:请注意,我试图制作一个简单易懂的可重现示例。我的专栏的实际名称略有不同。例如,有 x1_sn_ctrl1 & x1_attr1_ctrl2

最佳答案

你可以使用:

tidyr::pivot_longer(df_start, 
                    cols = -c(name, age, number), 
                    names_to = c("xval", ".value"),
                    names_pattern = 'x(\\d+)_(.*)')

哪个产量

# A tibble: 9 x 7
  name    age number xval  sn_ctrl1 listing2_2 affect1
  <chr> <dbl>  <dbl> <chr>    <dbl>      <dbl>   <dbl>
1 John     28      6 1            1          1       9
2 John     28      6 2            4         NA       9
3 John     28      6 1           NA          5      NA
4 Paul     27      4 1            2          1       4
5 Paul     27      4 2            1         NA       3
6 Paul     27      4 1           NA          3      NA
7 Ringo    31      9 1            3          1       2
8 Ringo    31      9 2            2         NA       8
9 Ringo    31      9 1           NA          5      NA

关于r - pivot_longer 与列组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60317889/

相关文章:

r - 如何只保留没有时间字段字符串的日期变量

r - data.table 更新对非等价自联接的奇怪行为

r - 在包检查中运行示例时出现 "could not find function"

r - 创建连续整数,然后使用 dplyr 创建存储在 sqlserver 中的表的索引

r - r : edge labels are overlapping 中的 igraph 包

r - 如何根据另一个变量的值对 R 中的变量进行计数?

r - ifelse 在 R 中有两个条件数字和分类

r - 如何根据过滤条件添加计数列而不是在 dplyr 中分组?

r - 2 个样本之间的 Kullback-Leibler 距离

r - 是否有更有效或更简洁的方法来使用 tidyr::gather 使我的数据看起来 'tidy' ?