Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用dplyr根据模式过滤数据帧并对其重新排序_R_Dplyr_Tidyr - Fatal编程技术网

使用dplyr根据模式过滤数据帧并对其重新排序

使用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

我需要根据一个模式(所有带有'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.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>