在R语言管道表达式中如何重新排列tbl对象的变量?
嗨,看起来你已经用dplyr管道完成了不少数据整理工作,要在这个管道里重新排列tbl对象的变量,有两个非常实用的方法,我给你详细拆解下:
1. 用select()指定完整列顺序
select()不仅能筛选列,还可以直接按你想要的顺序列出所有变量,以此完成重排。这种方法适合你明确知道所有列的理想顺序时使用。
把它加入到你的现有管道中即可,比如把关键标识列放在最前面,示例代码如下:
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")) %>% # 补全你的mutate逻辑 # 这里按你需要的顺序列出所有变量 select(orgID, orgName, orgShortName, projectRcn, orgType, orgTypeFull, orgRole, ...)
只要把...替换成你剩下的列名,就能得到完全符合预期顺序的tbl对象。
2. 用relocate()灵活调整部分列位置
如果你只想调整少数几列的位置,不想逐个列出所有变量,relocate()会更高效——它可以精准地把指定列移到目标位置,剩下的列保持原有顺序。
比如你想把orgID、orgName放到最开头,同时把新生成的orgTypeFull移到orgType后面,代码可以这么写:
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")) %>% relocate(orgID, orgName, .before = projectRcn) %>% # 把这两列移到projectRcn前面(也就是最开头) relocate(orgTypeFull, .after = orgType) # 把orgTypeFull移到orgType的紧后面
这种方法不用改动其他列的顺序,只针对需要调整的列操作,非常适合快速微调。
内容的提问来源于stack exchange,提问作者geoffest
相关产品推荐
相关产品推荐

