基于 R 中 "character"类型的两列删除重复的行

标签 r

我有一个数据框,想删除在两列(名为“Up”和“Down”)中有重复字符串的行。如果某些行仅在 2 列中的 1 列中具有重复的字符串值,则不应删除它们。从重复的行中,我想保留在另一列(名为“折叠”)上找到的最高值的行。除此任务外,第 4 列(名为“Name”)还需要一些字符替换,如下所示:

由此:

ID  Name                    Fold   Up           Down
1   mRNA_splicing(5)        3.2    a,b,c,d,e    f,g,h,i 
2   mRNA_processing(7)      3.1    a,b,c,d,e    f,g,h,i 
3   adherens_junctions(5)   2.6    k,l,m        p,q,r,s,t,u
4   glucose_transport(4)    3.4    d,j,n        o,p,v,w,z              
5   hexose_transport(2)     3.5    d,j,n        o,p,v,w,y,z

我想获得这个:
ID  Name                    Fold   Up           Down
1   mRNA splicing           3.2    a,b,c,d,e    f,g,h,i  
2   adherens junctions      2.6    k,l,m        p,q,r,s,t,u
3   glucose transport       3.4    d,j,n        o,p,v,w,z              
4   hexose transport        3.5    d,j,n        o,p,v,w,y,z

对于执行删除重复行的函数,duplicate 都没有。也不是 unique适用于角色,所以在这里做什么?我很欣赏你优雅的解决方案。

最佳答案

使用数据表解决方案:

dt <- as.data.table(your_df)
dt <- dt[dt[, .I[Fold == max(Fold)], by=list(Up, Down)]$V1]
dt[["Name"]] <- gsub("_", " ", sub("\\(.*?\\)$", "", dt[["Name"]]))
dt

   ID               Name Fold        Up        Down
1:  1      mRNA splicing  3.2 a,b,c,d,e     f,g,h,i
2:  3 adherens junctions  2.6     k,l,m p,q,r,s,t,u
3:  4  glucose transport  3.4     d,j,n   o,p,v,w,z
4:  5   hexose transport  3.5     d,j,n o,p,v,w,y,z

关于基于 R 中 "character"类型的两列删除重复的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58542579/

相关文章:

regex - 用 R 中的正则表达式解析(可能)不存在的数字

r - 有没有办法在 R 中创建 "fragile"属性?

r - 在 ggplotly 中分面时出现重复的图例

r - 使用 dist() 和 as.matrix() 时标记行和列名称

r - 在 ggplot2 ( scale_x_date ) 中创建特定的日期范围

r - 使用 kableExtra 增加行/行间距

r - 避免打印到控制台的字符串被截断(在 RStudio 中)

r - 从 Shiny ggplot 中的点击创建数据集

r - Quandl、Quantmod 或 TrueFX 每小时数据

r - 更新 R data.frame 中的单个值(不是行)