如何在 R 中将多个列合并为一个具有不同名称的列

How to combine multiple columns into one with a different name in R

我正在尝试将 18 列归为一列。如下图所示。

我的数据是这样的

Data

我希望我的输出看起来像这样:(主题和 TGroup 是 ordered/named 随机)

Subject   TGroup      A
 1        positive    0       
 2        neutral     1 
 3        negative    1   
 4        positive    0     

我将数据转换为长格式,但我们可以只提取名称的第一部分并使用 names_pattern 将所有值放入一列中。这就是您要找的吗?我对所需的输出有点不清楚。

library(tidyverse)

df %>%
  pivot_longer(-c(Subject, TGroup),
               names_to = c('.value'),
               names_pattern = '(.*?)_.*')

输出

   Subject TGroup       A
     <dbl> <chr>    <dbl>
 1       1 positive     0
 2       1 positive     0
 3       1 positive     1
 4       2 positive     1
 5       2 positive     1
 6       2 positive     1
 7       3 positive     1
 8       3 positive     0
 9       3 positive     1
10       4 positive     1
11       4 positive     1
12       4 positive     0

数据

df <- structure(
  list(
    Subject = c(1, 2, 3, 4),
    TGroup = c("positive", "positive", "positive", "positive"),
    A_1 = c(0, 1, 1, 1),
    A_2 = c(0, 1, 0, 1),
    A_3 = c(1, 1, 1, 0)
  ),
  class = "data.frame",
  row.names = c(NA,-4L)
)