【问题标题】:What does subset(df, !duplicated(x)) do?子集(df,!duplicated(x))做什么?
【发布时间】:2019-03-18 20:33:05
【问题描述】:

寻找详细的答案。

当我们有一个包含三个变量xyz 的数据框(df)时,以下命令会做什么?

subset(df, !duplicated(x))

【问题讨论】:

    标签: r subset


    【解决方案1】:

    duplicated 函数按顺序遍历其参数,如果存在与当前值相同的先前值,则返回 TRUE。它是一个通用函数,因此它有一个默认定义(用于向量),也有一个用于其他类的定义,例如 data.frame 类的对象。子集函数将作为第二个或第三个参数传递的表达式视为列名是第一类对象。这被称为“非标准评估”。 (注意否定运算符。)所以这个对subset 的调用将返回data.frame 的行,其中只有名为“x”的列的第一个实例不重复。它可能会返回一个数据框,其中的行数等于 x 列中唯一项的数量。

    > dat <- data.frame( x =sample(1:5, 20, repl=TRUE), y=1:5, z=1:4)
    > dat
       x y z
    1  2 1 1
    2  2 2 2
    3  2 3 3
    4  5 4 4
    5  4 5 1
    6  1 1 2
    7  2 2 3
    8  2 3 4
    9  5 4 1
    10 1 5 2
    11 2 1 3
    12 4 2 4
    13 5 3 1
    14 4 4 2
    15 3 5 3
    16 3 1 4
    17 4 2 1
    18 4 3 2
    19 1 4 3
    20 1 5 4
    
    > subset(dat, !duplicated(x))
       x y z
    1  2 1 1
    4  5 4 4
    5  4 5 1
    6  1 1 2
    15 3 5 3
    

    【讨论】:

    • 我试图理解您的回答,您的意思是“此命令对每个唯一的 x 值仅保留一个观察值”。
    • 你没看错。我的逻辑颠倒了;这个例子应该澄清。 (对于我的旧大脑来说,太多的负面因素跟不上。)
    猜你喜欢
    • 2021-04-01
    • 2011-03-23
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2016-05-16
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多