在pivot_longer中,每行有多个观测值时,names_to'.value'的约定如何操作?

最近的一个SO的答案,无耻的抄袭,使用dplyr::pivot_longer将6个变量处理成3个。

我可以理解所有pivot_longer参数的逻辑,除了 names to '.values' 输入。

我可以知道它的作用:它根据输入中第一个带括号的regex表达式创建新的变量名。names_pattern 参数。

我的问题是’.values’是如何工作的?

我可以看到它在pivot_longer函数示例部分用于 “每行多个观测值”;但示例中没有给出解释。

感觉上,它可能是一个regex选项。. 意味着匹配除了\n以外的任何字符;或者它是一种’代词’类型的输出,似乎在’tidyverse’中很常见,意思是类似于’regex表达式的输出或值’?

如果有任何关于如何理解pivot_longer的复杂性的指导或提示,我们将非常感激。

还是说只能通过实验来了解这个函数的作用?

原问题的链接。[多列和多值的数据透视更长

library(tibble)
library(tidyr)


tib <- tibble(type = c(1L, 1L, 1L, 2L, 2L, 2L), 
              id = c(1L, 2L, 3L, 1L, 2L, 3L), 
              age2000 = c(20L, 35L, 24L, 32L, 66L, 14L), 
              age2001 = c(21L, 36L, 25L, 33L, 67L, 15L),
              age2002 = c(22L, 37L, 26L, 34L, 68L, 16L),
              bool2000 = c(1L, 2L, 1L, 2L, 2L, 1L),
              bool2001 = c(1L, 2L, 1L, 2L, 2L, 1L),
              bool2002 = c(1L, 2L, 1L, 2L, 2L, 1L))




pivot_longer(tib,
             cols = -c(id, type), 
             names_to = c('.value', 'year'),
             names_pattern = '([a-z]+)(\\d+)')

解决方案:

源码, .value 套餐 values_toNULL 以致于它没有使用 values_to 而是单元格本身的名称。

如果你看这一行。

 if (".value" %in% names_to) {
    values_to <- NULL
  }

Then:

  out <- tibble(.name = cols)
  out[[".value"]] <- values_to
  out <- vec_cbind(out, names)
  out
}

out[[.value]] 将选择除id和type以外的列,然后用 names_pattern. 由于名称的格式是: age2000జజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజ names_pattern 休息 age2000 比如说 age2000 后者以 year.value 确保前者保留了从regex(这里是年龄)中出来的内容。

给TA打赏
共{{data.count}}人
人已打赏
解决方案

在Apache Nifi中用Regex替换文本

2022-5-13 10:00:16

解决方案

Flink文件读取堆内存异常

2022-5-13 10:00:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索