R:有条件地删除重复行

标签 r

我在 R 中有一个大型有序数据框,其中包含两列“gene”和“rank”,我想删除正方向上第二次出现的重复行AND重复行在负方向上第一次出现。

例如,在以下数据集中,我想删除第 6262 行和第 12200 行,以便保留在任一方向上具有最大排名值的基因:

> head(a_ordered, n=10)
              gene     rank
10597      SLC37A1  2.827330
6262       SLC37A1  2.700882
12504         UBR4  2.698938
10934        SP110  2.690130
1563         CALB1  2.633179
6031  LOC100128239 -2.499959
6718        MBTPS1 -2.513134
1528          CA14 -2.549553
12200        NXPE3 -2.850011
7978         NXPE3 -3.153175

成为,

 > head(a_ordered, n=10)
                  gene     rank
    10597      SLC37A1  2.827330
    12504         UBR4  2.698938
    10934        SP110  2.690130
    1563         CALB1  2.633179
    6031  LOC100128239 -2.499959
    6718        MBTPS1 -2.513134
    1528          CA14 -2.549553
    7978         NXPE3 -3.153175

谢谢!

最佳答案

您可以使用dplyr::filter来保留那些abs(rank) == max(abs(rank))gene<分组的行:

library(dplyr)
res <- df %>% group_by(gene) %>% filter(abs(rank) == max(abs(rank)))
##Source: local data frame [8 x 3]
##Groups: gene [8]
##
##     ID         gene      rank
##  <int>        <chr>     <dbl>
##1 10597      SLC37A1  2.827330
##2 12504         UBR4  2.698938
##3 10934        SP110  2.690130
##4  1563        CALB1  2.633179
##5  6031 LOC100128239 -2.499959
##6  6718       MBTPS1 -2.513134
##7  1528         CA14 -2.549553
##8  7978        NXPE3 -3.153175

数据:

df <- structure(list(ID = c(10597L, 6262L, 12504L, 10934L, 1563L, 6031L, 
6718L, 1528L, 12200L, 7978L), gene = c("SLC37A1", "SLC37A1", 
"UBR4", "SP110", "CALB1", "LOC100128239", "MBTPS1", "CA14", "NXPE3", 
"NXPE3"), rank = c(2.82733, 2.700882, 2.698938, 2.69013, 2.633179, 
-2.499959, -2.513134, -2.549553, -2.850011, -3.153175)), .Names = c("ID", 
"gene", "rank"), class = "data.frame", row.names = c(NA, -10L
))
##      ID         gene      rank
##1  10597      SLC37A1  2.827330
##2   6262      SLC37A1  2.700882
##3  12504         UBR4  2.698938
##4  10934        SP110  2.690130
##5   1563        CALB1  2.633179
##6   6031 LOC100128239 -2.499959
##7   6718       MBTPS1 -2.513134
##8   1528         CA14 -2.549553
##9  12200        NXPE3 -2.850011
##10  7978        NXPE3 -3.153175

关于R:有条件地删除重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41149914/

相关文章:

r - 为R函数编写装饰器

R:根据列中的值合并两个数据框并返回两个数据框的所有值

R图例不起作用

c++ - 使用 configure.ac 找不到 boost c++

r - 如何手动设置条形图中的颜色

r - 循环数据以将值 > 或 < 变量设置为 R 中的 NA

r - 折线图上的程序标签以避免线条 ggplot2

r - 使用带有 cronR 调度的 here 包的正确方法

python - R 网状 : how can I close/restart the python console

r - R中如何拆分字母、带括号的字母和数字?