在 R 中,如何在管道表达式中重新排序 tbl 的变量?

In R, how can I reorder variables of a tbl within a piped expression?

我使用以下管道表达式加载了 .csv 文件、转换为 tbl、重命名变量、突变等:

h2020orgs <- read.csv2(file="C:/Users/Geoff/Desktop/Personal/DataCamp/R/R projects/Horizon_2020_orgs_data/cordis_h2020_orgs.csv") %>%
  tbl_df() %>%
  select(1:15) %>%
  rename(projectRcn = ï..projectRcn,
         orgType = activityType,
         orgRole = role,
         orgID = id,
         orgName = name,
         orgShortName = shortName) %>%
  mutate(orgTypeFull = recode(orgType,
                              HES = "Higher education",
                              OTH = "Other",
                              PRC = "Private company",
                              PUB = "Public body",
                              REC = "Research centre"))

使用names(h2020orgs)可以看到变量索引:

names(h2020orgs)
 [1] "projectRcn"         "projectID"          "projectAcronym"     "orgRole"           
 [5] "orgID"              "orgName"            "orgShortName"       "orgType"           
 [9] "endOfParticipation" "ecContribution"     "country"            "street"            
[13] "city"               "postCode"           "organizationUrl"    "orgTypeFull"

我想移动 "orgTypeFull" 使其与 "orgType" 相邻(紧接其后)。我知道我可以使用以下独立调用来执行此操作:h2020orgs <- h2020orgs[, c(...)] 但是有没有办法将其包含在上面的管道表达式中?

使用 select([...], orgType, orgTypeFull, [...]),其中 [...] 表示 "put other column names there"。

您可以使用 dplyr 中的 select() 按名称或索引对列重新排序。

使用索引:

... %>% select(1:8, 16, 9:15)

您可以使用 data.table 包中的 setcolorder

h2020orgs %>% setcolorder(c(1:8,16:9))

或者没有管道:

setcolorder(h2020orgs, c(1:8,16:9))