【发布时间】:2019-03-18 20:33:05
【问题描述】:
寻找详细的答案。
当我们有一个包含三个变量x、y 和z 的数据框(df)时,以下命令会做什么?
subset(df, !duplicated(x))
【问题讨论】:
寻找详细的答案。
当我们有一个包含三个变量x、y 和z 的数据框(df)时,以下命令会做什么?
subset(df, !duplicated(x))
【问题讨论】:
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
【讨论】: