我已经将CSV文件读入R data.frame.某些行在其中一列中具有相同的元素.我想删除该列中重复的行.例如:
platform_external_dbus 202 16 google 1
platform_external_dbus 202 16 space-ghost.verbum 1
platform_external_dbus 202 16 localhost 1
platform_external_dbus 202 16 users.sourceforge 8
platform_external_dbus 202 16 hughsie 1
Run Code Online (Sandbox Code Playgroud)
我只想要其中一行,因为其他行在第一列中具有相同的数据.
R' duplicated返回一个向量,显示向量或数据帧的每个元素是否是具有较小下标的元素的副本.因此,如果5行数据帧的第3行,第4行和第5行相同,duplicated则会给出向量
FALSE, FALSE, FALSE, TRUE, TRUE
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我真的想得到
FALSE, FALSE, TRUE, TRUE, TRUE
Run Code Online (Sandbox Code Playgroud)
也就是说,我想知道一行是否与具有更大下标的行重复.
我尝试使用这里提供的代码用dplyr找到所有重复的元素,如下所示:
library(dplyr)
mtcars %>%
mutate(cyl.dup = cyl[duplicated(cyl) | duplicated(cyl, from.last = TRUE)])
Run Code Online (Sandbox Code Playgroud)
如何转换此处显示的代码以使用dplyr查找所有重复的元素?我上面的代码只是抛出一个错误?或者甚至更好,是否有另一种功能可以比复杂的x[duplicated(x) | duplicated(x, from.last = TRUE)])方法更简洁地实现这一目标?
我想删除在矢量中出现多次的所有项目.具体来说,这包括字符,数字和整数向量.目前,我正在使用duplicated()向前和向后(使用fromLast参数).
是否有更高计算效率(更快)的方法在R中执行此操作?下面的解决方案很简单,可以写入/读取,但执行重复搜索两次似乎效率低下.也许使用额外数据结构的基于计数的方法会更好?
例:
d <- c(1,2,3,4,1,5,6,4,2,1)
d[!(duplicated(d) | duplicated(d, fromLast=TRUE))]
#[1] 3 5 6
Run Code Online (Sandbox Code Playgroud)
我已经对这个主题进行了快速搜索,但是没有找到以前帖子中的任何内容来解决我的问题.看起来非常直接,但我还是没有想出如何有效地做到这一点.
在下面的数据帧,我想用一个单一的入口(在这种情况下,删除所有的行B500和D40).
x_1 <- c("A1", "A1","A1", "B10", "B10", "B10","B10",
"B500", "C100", "C100", "C100", "D40", "G100", "G100")
z_1 <- rnorm(14, 70)
z_2 <- rnorm(14, 1.7)
A <- data.frame(x_1, z_1, z_2)
x_1 z_1 z_2
1 A1 69.65033 1.5308858
2 A1 68.72687 2.2859416
3 A1 68.32700 0.7994794
4 B10 68.68382 0.5212132
5 B10 70.23359 1.3266729
6 B10 70.68604 4.3823605
7 B10 70.52774 2.2430322
8 B500 69.62868 3.0121398
9 C100 69.41412 2.1895905
10 C100 69.10745 1.7599065
11 C100 69.70876 1.6001099 …Run Code Online (Sandbox Code Playgroud) 我有以下数据集:
dataset <- data.frame(id = c("A","A","A","A","B","B","B,"B"),
value = c(1,1,2,3,5,6,6,7))
Run Code Online (Sandbox Code Playgroud)
对于每个重复的 id,我想标记它发生的行,并且这个标志应该与数据帧源的长度相同。这是预期的结果:
id value flag
A 1 1
A 1 1
A 2 0
A 3 0
B 5 0
B 6 1
B 6 1
B 7 0
Run Code Online (Sandbox Code Playgroud)
有没有办法让我不必使用 for 循环?任何帮助将不胜感激。
我有4个清单
a <- list(1,2,3,4)
b <- list(5,6,7,8)
c <- list(7,9,0)
d <- list(12,14)
Run Code Online (Sandbox Code Playgroud)
我想知道哪些列表有共同的元素.在此示例中,列出b并c具有共同的元素7.
蛮力方法是采用每个列表组合并找到交叉点.在R中还有其他有效的方法吗?
另一种方法是从所有列表中制作单个列表并找到重复的列表.那么也许我们可以有一个映射函数来指示这些重复项来自哪些原始列表.但我不确定如何做到这一点.我遇到过这篇文章
我在想是否可以修改它以找出具有重复项的实际列表.
我必须为许多列表组重复此过程.任何建议/想法都非常感谢!提前致谢