我有一个数据框,想要删除两列中具有重复字符串的行(名为“Up”和“Down”)。如果某些行仅在 2 列中的 1 列中具有重复的字符串值,则不应将其删除。从重复的行中,我想保留在另一列(名为“折叠”)上找到的最高值的行。除了此任务之外,第四列(名为“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/