【发布时间】:2022-01-15 15:04:26
【问题描述】:
我正在使用 R 编程语言。我有下表:
age=18:29
height=c(76.1,77,78.1,78.2,78.8,79.7,79.9,81.1,81.2,81.8,82.8,83.5)
gender=c("M","F","M","M","F","F","M","M","F","M","F","M")
testframe = data.frame(age=age,height=height,height2=height,gender=gender,gender2=gender)
head(testframe)
age height height2 gender gender2
1 18 76.1 76.1 M M
2 19 77.0 77.0 F F
3 20 78.1 78.1 M M
4 21 78.2 78.2 M M
5 22 78.8 78.8 F F
6 23 79.7 79.7 F F
在上表中,我想删除具有相同条目但名称不同的列。这可以按如下方式完成(在 Base R 中):
no_dup = testframe[!duplicated(as.list(testframe))]
head(no_dup)
age height gender
1 18 76.1 M
2 19 77.0 F
3 20 78.1 M
4 21 78.2 M
5 22 78.8 F
6 23 79.7 F
我的问题:有谁知道如何将上述代码testframe[!duplicated(as.list(testframe)) 转换为“DPLYR”命令?这可能吗?
谢谢!
【问题讨论】:
-
您可以使用管道:
testframe %>% filter(. %>% as.list %>% duplicated %>% `!`),但在这种情况下,将数据框用作list是有意义的,dplyr用于工作数据框,而不是列表。 -
@Gregor Thomas:谢谢你的回复!我会试试这个!
-
但我会指出我评论中的代码有点半开玩笑。除了管道(其中大部分仍然是嵌套的!)之外,唯一的变化是将
[替换为filter。 -
@Gregor Thomas:谢谢你的回复!为什么你认为你评论中的代码“有点半开玩笑:?我不确定你在第二句话中的意思 - 如果你有时间,你能告诉我你指的是什么替代品吗?谢谢!
-
嗯,我猜
.不是这样工作的。我的“舌头在脸颊”评论是因为我所做的几乎所有事情都是将!duplicated(as.list())更改为as.list %>% duplicated %>% `!`,它仍然不使用任何dplyr函数。所以它使用来自magrittr包的管道,但我(尝试)使用的唯一dplyr函数是filter。
标签: r dplyr duplicates data-manipulation