正在寻找详细的答案。
当我们有一个包含三个变量df
,x
和y
的数据框(z
)时,以下命令会做什么?
subset(df, !duplicated(x))
答案 0 :(得分:2)
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