Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 子集(df,!duplicated(x))做什么?_R_Subset - Fatal编程技术网

R 子集(df,!duplicated(x))做什么?

R 子集(df,!duplicated(x))做什么?,r,subset,R,Subset,寻找详细的答案 当我们有一个数据帧(df)包含三个变量x、y和z,下面的命令做什么 subset(df, !duplicated(x)) duplicated函数按顺序遍历其参数,如果先前值与当前值相同,则返回TRUE。它是一个泛型函数,因此它有一个默认定义(用于向量),但也有一个用于其他类的定义,例如data.frame类的对象。subset函数将作为第二个或第三个参数传递的表达式视为列名是第一类对象。这被称为“非标准评估”。(注意否定运算符。)因此对子集的调用将返回data.frame的行

寻找详细的答案

当我们有一个数据帧(
df
)包含三个变量
x
y
z
,下面的命令做什么

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
>dat-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
>子集(dat,!重复(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值只保留一个观察值”。你读对了吗。我把逻辑颠倒过来了;这个例子应该澄清。(太多的负面信息让我的大脑无法跟上。)