使用dplyr根据模式过滤数据帧并对其重新排序
我需要根据一个模式(所有带有'EXO'模式的值)从数据帧中的所有列中提取所有值,并相应地对其重新排序 我尝试使用传统的R函数并应用,但我得到了一个与不同行数相关的错误。我认为使用dplyr或tidyr函数会更容易 我试过:使用dplyr根据模式过滤数据帧并对其重新排序,r,dplyr,tidyr,R,Dplyr,Tidyr,我需要根据一个模式(所有带有'EXO'模式的值)从数据帧中的所有列中提取所有值,并相应地对其重新排序 我尝试使用传统的R函数并应用,但我得到了一个与不同行数相关的错误。我认为使用dplyr或tidyr函数会更容易 我试过: df2 = as.data.frame(apply(df,2,function (x) x[grepl("^EXO",x)])) Error in (function (..., row.names = NULL, check.rows = FALSE, check.nam
df2 = as.data.frame(apply(df,2,function (x) x[grepl("^EXO",x)]))
Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : arguments imply differing number of rows: 2, 1, 7
看起来排序应该是独立的。我们
将没有“EXO”子字符串的列值替换为NA
,然后执行顺序
library(dplyr)
library(stringr)
df %>%
mutate_all(~ replace(., !str_detect(., "EXO"), NA_character_) %>%
{.[order(.)]})
# Group1 Group2 Group3 Group4
#1 EXO_C3L4 EXO_BRPF3 EXO_TATDN2P3 EXO_SATB2-AS1
#2 EXO_FEZF1-AS1 <NA> EXO_TCIM EXO_SFTA3
#3 <NA> <NA> <NA> EXO_SIX3-AS1
#4 <NA> <NA> <NA> EXO_SMIM2-IT1
#5 <NA> <NA> <NA> EXO_SNORA46
#6 <NA> <NA> <NA> EXO_SNORD101
#7 <NA> <NA> <NA> EXO_SNORD114-18
#8 <NA> <NA> <NA> <NA>
库(dplyr)
图书馆(stringr)
df%>%
变异所有(~replace(,!str_detect(,“EXO”),不包含字符%>%
{.[顺序(.)]}
#第1组第2组第3组第4组
#1 EXO_C3L4 EXO_BRPF3 EXO_TATD2P3 EXO_SATB2-AS1
#2 EXO_FEZF1-AS1 EXO_TCIM EXO_SFTA3
#3 EXO_SIX3-AS1
#4 EXO_SMIM2-IT1
#5 EXO_SNORA46
#6 EXO_SNORD101
#7 EXO_SNORD114-18
#8
> df2
Group1 Group2 Group3 Group4
1 NA EXO_BRPF3 NA EXO_SATB2-AS1
2 EXO_C3L4 NA NA NA
3 NA NA NA EXO_SFTA3
4 NA NA NA EXO_SIX3-AS1
5 NA NA NA EXO_SMIM2-IT1
6 NA NA EXO_TATDN2P3 EXO_SNORA46
7 NA NA EXO_TCIM EXO_SNORD101
8 EXO_FEZF1-AS1 NA NA EXO_SNORD114-18
#And after that, reorder each columns alphabetically:
> df3
Group1 Group2 Group3 Group4
1 EXO_C3L4 EXO_BRPF3 EXO_TATDN2P3 EXO_SATB2-AS1
2 EXO_FEZF1-AS1 NA EXO_TCIM EXO_SFTA3
3 NA NA NA EXO_SIX3-AS1
4 NA NA NA EXO_SMIM2-IT1
5 NA NA NA EXO_SNORA46
6 NA NA NA EXO_SNORD101
7 NA NA NA EXO_SNORD114-18
8 NA NA NA NA
library(dplyr)
library(stringr)
df %>%
mutate_all(~ replace(., !str_detect(., "EXO"), NA_character_) %>%
{.[order(.)]})
# Group1 Group2 Group3 Group4
#1 EXO_C3L4 EXO_BRPF3 EXO_TATDN2P3 EXO_SATB2-AS1
#2 EXO_FEZF1-AS1 <NA> EXO_TCIM EXO_SFTA3
#3 <NA> <NA> <NA> EXO_SIX3-AS1
#4 <NA> <NA> <NA> EXO_SMIM2-IT1
#5 <NA> <NA> <NA> EXO_SNORA46
#6 <NA> <NA> <NA> EXO_SNORD101
#7 <NA> <NA> <NA> EXO_SNORD114-18
#8 <NA> <NA> <NA> <NA>