【问题标题】:Separate several special rows based on row names by RR根据行名分隔几个特殊行
【发布时间】:2022-02-01 09:38:21
【问题描述】:

我有一个表,我想按行名分隔一些行。

            phi      psi
A-MET-0     NA     158.0945
A-VAL-1   -144.914  137.4733
A-LEU-2   -95.021   149.7834
A-SER-3   -82.6826  166.6769
B-GLU-4   -62.5314  -36.2634
H-GLY-5   -59.6463  -42.0355
A-GLU-6   -68.6914  -40.2354
AB-TRP-7  -63.5297  -36.769
A-GLN-8  -64.8056   -38.5128

我会根据下面的命令来分隔一个特定的行

tor$tbl["A-LEU-2",]

但是当我尝试分隔几行时,它会出错。 我使用以下命令分隔几行。

tor$tbl["A-LEU-2":"AB-TRP-7", ]

如何根据行名从表格中分离出几行?

谢谢你的指导。

【问题讨论】:

  • 您是要提取这两行特定的行还是这两行之间的所有内容?
  • 我想把中间的所有东西分开

标签: r subset


【解决方案1】:

这是一个可以做到这一点的函数 -

subset_by_rowname_range <- function(data, start_name, end_name) {
  rn <- rownames(data)
  data[match(start_name, rn) : match(end_name, rn), ]
}
subset_by_rowname_range(df, "A-LEU-2", "AB-TRP-7")

#              phi      psi
#A-LEU-2  -95.0210 149.7834
#A-SER-3  -82.6826 166.6769
#B-GLU-4  -62.5314 -36.2634
#H-GLY-5  -59.6463 -42.0355
#A-GLU-6  -68.6914 -40.2354
#AB-TRP-7 -63.5297 -36.7690

subset_by_rowname_range(df, "H-GLY-5", "A-GLN-8")

#              phi      psi
#H-GLY-5  -59.6463 -42.0355
#A-GLU-6  -68.6914 -40.2354
#AB-TRP-7 -63.5297 -36.7690
#A-GLN-8  -64.8056 -38.5128

数据

df <- structure(list(phi = c(NA, -144.914, -95.021, -82.6826, -62.5314, 
-59.6463, -68.6914, -63.5297, -64.8056), psi = c(158.0945, 137.4733, 
149.7834, 166.6769, -36.2634, -42.0355, -40.2354, -36.769, -38.5128
)), class = "data.frame", row.names = c("A-MET-0", "A-VAL-1", 
"A-LEU-2", "A-SER-3", "B-GLU-4", "H-GLY-5", "A-GLU-6", "AB-TRP-7", 
"A-GLN-8"))

【讨论】:

  • 如果一张表有几千行,这个写的代码可以用吗?
  • @user18043726 是的,当然。此代码的工作原理与数据中的行数无关。你试过了吗?
【解决方案2】:

一个简单的解决方案是插入行编号,它可以用作slice的索引:

df %>%
  mutate(row = row_number()) %>%
  slice(1:8)

或者,这也可以:在这里,which 获取 row.names' 索引,slice 可以通过这些索引进行过滤:

df %>%
  slice(which(grepl("A-LEU-2", row.names(df))):which(grepl("AB-TRP-7", row.names(df))))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 2021-11-11
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多