我正在编写一个将数据表转换为长格式的函数.对于cols = 参数,第一列的名称将始终相同,但最后一列(和列数)将发生变化.有没有一种方法可以在不命名列或不按索引命名的情况下获取列的"REST"?

假设我有这样的重述:

data <- structure(list(Site = c("A", "B"), Group = c("1", "2"), grip = c("S", 
"H"), height = c("S", "T"), width = c("W", "N"), QA = c("Y", 
"N")), class = "data.frame", row.names = c(NA, -2L))

这看起来是这样的:

  Site Group grip height width QA
1    A     1    S      S     W  Y
2    B     2    H      T     N  N

有时,数据集将具有更多列.假设我想要获取列grip:QA,但没有命名QA或给出它的索引号.我try 了以下几种方法:

data %>%
  pivot_longer(cols = grip:everything(),
               names_to = "Name",
               values_to = "value")

但我收到了警告Warning message: In x:y : numerical expression has 6 elements: only the first used,但它并没有按我希望的方式运行.我想要达到的目标有可能实现吗?

推荐答案

你可以用last_col:

library(tidyr)

data %>%
  pivot_longer(
    cols = grip:last_col(),
    names_to = "Name",
    values_to = "value"
  )
#> # A tibble: 8 × 4
#>   Site  Group Name   value
#>   <chr> <chr> <chr>  <chr>
#> 1 A     1     grip   S    
#> 2 A     1     height S    
#> 3 A     1     width  W    
#> 4 A     1     QA     Y    
#> 5 B     2     grip   H    
#> 6 B     2     height T    
#> 7 B     2     width  N    
#> 8 B     2     QA     N

或者作为另一种 Select ,在使用!-透视时排除您不想包括的列:

data %>%
  pivot_longer(
    cols = !c(Site, Group),
    names_to = "Name",
    values_to = "value"
  )
#> # A tibble: 8 × 4
#>   Site  Group Name   value
#>   <chr> <chr> <chr>  <chr>
#> 1 A     1     grip   S    
#> 2 A     1     height S    
#> 3 A     1     width  W    
#> 4 A     1     QA     Y    
#> 5 B     2     grip   H    
#> 6 B     2     height T    
#> 7 B     2     width  N    
#> 8 B     2     QA     N

R相关问答推荐

跨列应用多个摘要函数:summerise_all:列表对象无法强制为double类型'

带有gplot 2的十字舱口

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

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

如何在xyplot中 for each 面板打印R^2

selectInput不返回ALL,并将因子转换为shiny 的数字

有没有一个R函数允许你从一个数字变量中提取一个数字,而不考虑它的位置(不仅仅是第一个或最后一个数字?

在"gt"表中添加第二个"groupname_col",而不连接列值

如何直接从Fortran到R的数组大小?

如果第一个列表中的元素等于第二个列表的元素,则替换为第三个列表的元素

非线性混合效应模型(NLME)预测变量的置信区间

如何识别倒排的行并在R中删除它们?

按多列统计频次

R+reprex:在呈现R标记文件时创建可重现的示例

对R中的列表列执行ROW Mean操作

如何在条形图中的x和填充变量中包含多个响应变量?

附加中缀操作符

在GT()中的列之间添加空格

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

使用grepl过滤特定列范围内的列名