【问题标题】:Subsetting Identical Observations in R [duplicate]R中的子集相同的观察[重复]
【发布时间】:2015-01-28 20:03:17
【问题描述】:

我正在尝试使用 R 查看蛋白质序列同源性,并且我想通过数据框寻找相同的位置和字母对。数据类似于下图:

Letter <- c("A", "B", "C", "D", "D", "E", "G", "L")
Position <- c(1, 2, 3, 4, 4, 5, 6, 7)
data.set <- cbind(Position, Letter)

产量:

     Position Letter
[1,] "1"      "A"   
[2,] "2"      "B"   
[3,] "3"      "C"   
[4,] "4"      "D"   
[5,] "4"      "D"   
[6,] "5"      "E"   
[7,] "6"      "G"   
[8,] "7"      "L"   

我想循环并找到所有相同的观察结果(在本例中为观察结果 4 和 5),但我很难找到最好的方法。

我希望生成的数据框看起来像:

     Position Letter
[1,] "4"      "D"   
[2,] "4"      "D"   

我尝试执行此操作的方法最终产生了此代码,但不幸的是它返回一个 TRUE 值,因为我意识到我正在比较两个相同的数据帧:

> identical(data.set[1:nrow(data.set),1:2], data.set[1:nrow(data.set),1:2])
[1] TRUE

我不确定循环使用 same() 函数是否是最好的方法?我确信我缺少一个更优雅的解决方案。

感谢您的帮助!

【问题讨论】:

    标签: r vector logic subset


    【解决方案1】:

    试试unique函数:

    unique(data.set)
    

    ...

    【讨论】:

    • 哦,天哪,这有点让人摸不着头脑......谢谢!
    【解决方案2】:

    您可以使用duplicated 使用fromLast 去两个方向:

    data.set[(duplicated(data.set)==T | duplicated(data.set, fromLast = TRUE) == T),]
    
    #     Position Letter
    #[1,] "4"      "D"   
    #[2,] "4"      "D"  
    

    【讨论】:

    • 谢谢,这对我来说很有价值!
    猜你喜欢
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 2016-05-14
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    相关资源
    最近更新 更多