我的问题涉及到的distinct功能dplyr.
首先,设置数据:
set.seed(0)
df <- data.frame(
x = sample(10, 100, rep = TRUE),
y = sample(10, 100, rep = TRUE)
)
Run Code Online (Sandbox Code Playgroud)
考虑以下两种用法distinct.
df %>%
group_by(x) %>%
distinct()
df %>%
group_by(x) %>%
distinct(y)
Run Code Online (Sandbox Code Playgroud)
第一个产生第二个不同的结果.据我所知,第一组操作找到"所有不同的值x,并返回第一个值y",其中第二个找到"对于每个值x,找到所有不同的值y".
为什么会这样呢?
df %>%
distinct(x, y)
df %>% distinct()
Run Code Online (Sandbox Code Playgroud)
产生相同的结果?
编辑:看起来这已经是一个已知的错误:https://github.com/hadley/dplyr/issues/1110
据我所知,答案是distinct在确定独特性时考虑对列进行分组,这对我来说似乎与其余部分的dplyr工作方式不一致。
因此:
df %>%
group_by(x) %>%
distinct()
Run Code Online (Sandbox Code Playgroud)
分组依据,查找(!)x中不同的值。x这似乎是一个错误。
然而:
df %>%
group_by(x) %>%
distinct(y)
Run Code Online (Sandbox Code Playgroud)
分组依据,查找给定x中不同的值。这相当于以下任一情况:yx
df %>%
distinct(x, y)
df %>% distinct()
Run Code Online (Sandbox Code Playgroud)
两者都在 x 和 y 中找到不同的值。
最重要的信息似乎是:不要使用分组和distinct. 只需使用相关的列名称作为 中的参数即可distinct。