如何收集用 tidyr 按顺序编号的列

how to gather columns which are numbered sequentially with tidyr

我有一组列如下

rowid   TimePoint2   TimePoint3    TimePoint4     TimePoint5    TimePoint6

我想整理数据,但在我使用粘贴功能时收集功能无法识别列名 我要的是

rowid
1   TimePoint2    43
2   TimePoint3    34
3   TimePoint4    24
4   TimePoint5    22
5   TimePoint6    44

等等

我的代码:

所以不要写:

y="TimePoint"
  Mydf<-
    select(df,matches(y),rowid)%>%
    gather(variable, value, TimePoint1,TimePoint2,TimePoint3,TimePoint4,TimePoint5,TimePoint6)

我想写这样的东西:

y="TimePoint"
  Mydf<-
    select(df,matches(y),rowid)%>%
    gather(variable, value, paste(y,1:10,",",sep=""))

上面的错误是Error: All select() inputs must resp;ve to integer column positions. The following do not: * paste (y,1:10,",",sep="")

我相信你能做到:

Mydf <- select(df,matches(y),rowid)%>%
    gather(variable, value, starts_with("TimePoint"))

由于您正在选择与 "TimePoint" 匹配的列,这也适用:

library(dplyr)
library(tidyr)
y <- "TimePoint"
Mydf <- df %>% select(rowid,matches(y)) %>% 
               gather(variable,value,-1)
print(Mydf)
##  rowid   variable value
##1     1 TimePoint2    43
##2     1 TimePoint3    34
##3     1 TimePoint4    24
##4     1 TimePoint5    22
##5     1 TimePoint6    44

在这里,我们 select 和您一样,但将 rowid 列放在第一位。然后使用 -1.

收集除第一列以外的所有列

数据:

df <- structure(list(rowid = 1L, TimePoint2 = 43L, TimePoint3 = 34L, 
    TimePoint4 = 24L, TimePoint5 = 22L, TimePoint6 = 44L), .Names = c("rowid", 
"TimePoint2", "TimePoint3", "TimePoint4", "TimePoint5", "TimePoint6"
), class = "data.frame", row.names = c(NA, -1L))
##  rowid TimePoint2 TimePoint3 TimePoint4 TimePoint5 TimePoint6
##1     1         43         34         24         22         44