我有一个像这样的data.frame -
set.seed(123)
df = data.frame(x=sample(0:1,10,replace=T),y=sample(0:1,10,replace=T),z=1:10)
> df
x y z
1 0 1 1
2 1 0 2
3 0 1 3
4 1 1 4
5 1 0 5
6 0 1 6
7 1 0 7
8 1 0 8
9 1 0 9
10 0 1 10
Run Code Online (Sandbox Code Playgroud)
我想根据前两列删除重复的行.预期产量 -
df[!duplicated(df[,1:2]),]
x y z
1 0 1 1
2 1 0 2
4 1 1 4
Run Code Online (Sandbox Code Playgroud)
我正在寻找使用dplyr包的解决方案.
更新:自问这个问题以来,dplyr已经更新,现在按照OP的要求执行
我正尝试获得第二至第七行中data.frame使用dplyr.
我这样做:
require(dplyr)
df <- data.frame(id = 1:10, var = runif(10))
df <- df %>% filter(row_number() <= 7, row_number() >= 2)
Run Code Online (Sandbox Code Playgroud)
但这会引发错误.
Error in rank(x, ties.method = "first") :
argument "x" is missing, with no default
Run Code Online (Sandbox Code Playgroud)
我知道我可以轻松制作:
df <- df %>% mutate(rn = row_number()) %>% filter(rn <= 7, rn >= 2)
Run Code Online (Sandbox Code Playgroud)
但我想明白为什么我的第一次尝试不起作用.
使用data.table我可以执行以下操作:
library(data.table)
dt = data.table(a = 1:2, b = c(1,2,NA,NA))
# a b
#1: 1 1
#2: 2 2
#3: 1 NA
#4: 2 NA
dt[, b := b[1], by = a]
# a b
#1: 1 1
#2: 2 2
#3: 1 1
#4: 2 2
Run Code Online (Sandbox Code Playgroud)
dplyr然而,尝试相同的操作,数据被加扰/排序a:
library(dplyr)
dt = data.table(a = 1:2, b = c(1,2,NA,NA))
dt %.% group_by(a) %.% mutate(b = b[1])
# a b
#1 1 1
#2 1 1
#3 2 …Run Code Online (Sandbox Code Playgroud)