首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:根据列名与行名的部分匹配对列进行排序。

R:根据列名与行名的部分匹配对列进行排序。
EN

Stack Overflow用户
提问于 2016-11-08 15:39:31
回答 1查看 1.1K关注 0票数 4

我有一个可以简化成如下所示的数据框架(包括最后的dput ):

代码语言:javascript
复制
    T2_KL_21  A1_LC_11  W3_FA_22  RR_BI_12  PL_EW_12  RT_LC_22  YU_BI_21
FA  1         2         3         4         5         6         7
BI  1         2         3         4         5         6         7
KL  1         2         3         4         5         6         7
EW  1         2         3         4         5         6         7
LC  1         2         3         4         5         6         7

我想对列进行排序,以便它们遵循行名的顺序(基于部分匹配)。然后看起来是这样的:

代码语言:javascript
复制
    W3_FA_22  RR_BI_12  YU_BI_21  T2_KL_21  PL_EW_12  A1_LC_11  RT_LC_22
FA  3         4         7         1         5         2         6
BI  3         4         7         1         5         2         6
KL  3         4         7         1         5         2         6
EW  3         4         7         1         5         2         6
LC  3         4         7         1         5         2         6

如果多个列名包含行名中的字符串,则应将它们并排保存,但顺序并不重要。

我已经过滤了这些列,以便它们在行名中都包含一个匹配项。

以下是数据框架的dput:

代码语言:javascript
复制
structure(list(T2_KL_21 = c(1L, 1L, 1L, 1L, 1L), A1_LC_11 = c(2L, 
2L, 2L, 2L, 2L), W3_FA_22 = c(3L, 3L, 3L, 3L, 3L), RR_BI_12 = c(4L, 
4L, 4L, 4L, 4L), PL_EW_12 = c(5L, 5L, 5L, 5L, 5L), RT_LC_22 = c(6L, 
6L, 6L, 6L, 6L), YU_BI_21 = c(7L, 7L, 7L, 7L, 7L)), .Names = c("T2_KL_21", 
"A1_LC_11", "W3_FA_22", "RR_BI_12", "PL_EW_12", "RT_LC_22", "YU_BI_21"
), class = "data.frame", row.names = c("FA", "BI", "KL", "EW", 
"LC"))

我试过使用pmatch,grep和match,但没有成功。

任何建议都将不胜感激!谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-08 15:42:32

我们可以遍历行名和grep来查找与unlist匹配的列名的索引,并使用该索引来排列列。

代码语言:javascript
复制
df1[unlist(lapply(gsub("\\d+", "", row.names(df1)), function(x) grep(x, names(df1))))]
#W3_FA_22 RR_BI_12 YU_BI_21 T2_KL_21 PL_EW_12 A1_LC_11 RT_LC_22
#FA        3        4        7        1        5        2        6
#BI        3        4        7        1        5        2        6
#KL        3        4        7        1        5        2        6
#EW        3        4        7        1        5        2        6
#LC        3        4        7        1        5        2        6
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40490882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档