我的数据通常包含宽格式的"左/右"或"前/后"前缀,不带分隔符,我需要通过这些前缀将变量组合成高格式.我有一个变通办法,可以使用"gSub()"在列名中插入分隔符("_"或".").然后,"Pivot_Long"对"Names_Sep"参数执行我想要的操作.不过,我想知道是否有一种方法可以更直接地使用"PIVOT_LONG""NAMES"语法("NAMES_PREFIX"、"NAMES_PLATE"、"NAMES_TO").以下是我正在try 的:

原始宽格式示例:

HW <- tribble(
  ~Subject,  ~LeftV1,  ~RightV1, ~LeftV2, ~RightV2,  ~LeftV3, ~RightV3,
  "A", 0, 1, 10, 11, 100, 101,
  "B", 2, 3, 12, 13, 102, 103,
  "C", 4, 5, 14, 15, 104, 105)

所需的高格式:

HWT <- tribble(
  ~Subject,  ~Side, ~V1,  ~V2,  ~V3,
  "A", "Left", 0, 10, 100,
  "A", "Right", 1, 11, 101, 
  "B", "Left", 2, 12, 102,
  "B", "Right", 3, 13, 103,
  "C", "Left", 4, 14, 104,
  "C", "Right", 5, 15, 105)

我try 了各种语法迭代,大致如下所示:

HWT <- HW %>% pivot_longer(
  cols = contains(c("Left", "Right")),
  names_pattern = "/^(Left|Right)",
  names_to =  c('Side', '.value') )

或者这样:

HWT <- HW %>% pivot_longer(
  cols = contains(c("Left", "Right")),
  names_prefix = "/^(Left|Right)",
  names_to =  c('Side', '.value') )

其中每一个都给出了语法错误,我不确定如何解决这些错误.

推荐答案

我们可以利用

library(tidyr)
library(dplyr)
HW %>% 
   pivot_longer(cols = -Subject, names_to = c("Side", ".value"),
   names_pattern = "^(Left|Right)(.*)")
# A tibble: 6 × 5
  Subject Side     V1    V2    V3
  <chr>   <chr> <dbl> <dbl> <dbl>
1 A       Left      0    10   100
2 A       Right     1    11   101
3 B       Left      2    12   102
4 B       Right     3    13   103
5 C       Left      4    14   104
6 C       Right     5    15   105

R相关问答推荐

使用gggplot 2在R中重新调整面板和y轴文本大小

使用lapply的重新定位功能

geom_Ribbon条件填充创建与数据不匹配的形状(ggplot 2 r)

编码变量a、b、c以匹配来自另一个数据点的变量x

工作流程_set带有Dplyrr风格的 Select 器,用于 Select 结果和预测因子R

R等效于LABpascal(n,1)不同的列符号

大规模重新标记haven标签数据

如何使用`ggplot2::geom_segment()`或`ggspatial::geom_spatial_segment()`来处理不在格林威治中心的sf对象?

如何计算R数据集中每个女性的子元素数量?

IMF IFS数据以R表示

如何指定我的函数应该查找哪个引用表?

按列中显示的配对组估算NA值

如何在PrePlot()中将多个元素设置为斜体

在R中,如何从一系列具有索引名的变量快速创建数据帧?

如何将这个小列表转换为数据帧?

如何显示准确的p值而不是<;0.001*?

如何使用包metaviz更改标签的小数位数?

使用LAG和dplyr执行计算,以便按行和按组迭代

如何将图例文本添加到图例符号中

识别部分重复行,其中一行为NA,其重复行为非NA