【发布时间】:2016-04-01 12:18:48
【问题描述】:
假设我有一个数据框df,其中包含三个向量:
colours individual value
1 white individual 1 0.4
2 white individual 1 0.7
3 black individual 2 1.1
4 black individual 3 0.5
有时,同一个人多次出现相同颜色但值不同的情况。我想编写一些代码来删除所有发生这种情况的实例。
***编辑:行数超过 4 - 数百万 - 我认为当前的解决方案行不通。
我想计算我当前所在的字符串在我的 for 循环中出现了多少次,然后从 data.frame 中删除它们。所以在上面的例子中,我想去掉个体 1。然后 df 会留下另外两行。
到目前为止,我的方法是这样的:
获取所有颜色的列表
获取所有个人的列表
-
写两个 for 循环。
colours <- unique(df$colours) ind <- unique(df$individual) for (i in ind) { for (c in colour) { #something here. Probably if, asking if the person I'm on in the loop #is found with the colour I am on, more than once, get rid of them } }
我的预期输出是这样的:
colours individual value
black individual 2 1.1
black individual 3 0.5
源数据
df <- data.frame(colours = c("white", "white", "black", "black"),
individual = c("individual 1", "individual 1", "individual 2", "individual 3"),
value = c(0.4, 0.7, 1.1, 0.5))
【问题讨论】:
-
你能用预期的输出更新吗
-
感谢您的建议,mtoto。除非有另一个具有不同值的向量,否则这将起作用。我不知道哪个值是正确的,所以我试图删除我为相同颜色的同一个人找到两个值的地方。我将把它编辑成问题,因为我刚刚注意到这会使事情变得复杂。
-
有人可以取消将此标记为重复吗?它不是。行不同。我改变了问题以反映这一点。抱歉之前的困惑。
-
好的,我只是关注 mtoto 的链接。如果不是这种情况,我将取消标记。但是,我会说
duplicated(...)|duplicated(..., fromLast=TRUE)是骗子。 -
在我看来仍然是重复的,只需要像
df[!(duplicated(df[1:2]) | duplicated(df[1:2], fromLast = TRUE)), ]中那样指定cols
标签: r duplicates