删除每个单元格内新行中的重复观察值

标签 r

我有一些数据对新线路进行了观察。例如第17行;

> d[17, ]
# A tibble: 1 x 2
    grp figures                                                                       
  <int> <chr>                                                                         
1  9923 "0.26 - 0.31\n0.97 - 1.02\n1.29 - 1.34\n0.26 - 0.31\n0.97 - 1.02\n1.29 - 1.34"

看起来像:

0.26 - 0.31

0.97 - 1.02

1.29 - 1.34   # duplicate

0.26 - 0.97

1.29 - 1.34   # duplicate

我想删除每个单元格中重复的行。我知道 duplicate 函数,但我不确定如何逐行应用它们。

数据:

d <- structure(list(grp = c(10467L, 2485L, 4749L, 331L, 2442L, 2847L, 
5910L, 10344L, 3382L, 10488L, 1665L, 6546L, 781L, 570L, 1109L, 
2181L, 9923L, 3107L, 844L, 6224L, 2781L, 671L, 1349L, 2410L, 
10256L, 944L, 5505L, 4220L, 4638L, 4917L, 868L, 9130L, 1168L, 
4294L, 5274L, 10836L, 3416L, 7427L, 2334L, 10898L), figures = c("1.13 - 1.21", 
"380 - 400", "4.35 - 4.65", "1.94 - 2.03\n2.33 - 2.42", "0.48 - 0.54", 
"3.64 - 3.66", "1.14 - 1.20", "2.87 - 2.90", "3.17 - 3.22\n3.10 - 3.20", 
"0.40 - 0.50\n0.35 - 0.45\n51 - 53", "1.01 - 1.10", "3.79 - 3.81\n3.76 - 3.80", 
"1.10 - 1.17", "1.57 - 1.67\n1.65 - 1.75", "1.35 - 1.45", "1.36 - 1.54\n1.75 - 1.80", 
"0.26 - 0.31\n0.97 - 1.02\n1.29 - 1.34\n0.26 - 0.31\n0.97 - 1.02\n1.29 - 1.34", 
"1.10 - 1.20", "1.35 - 1.50\n1.65 - 1.80\n1.35 - 1.50\n1.65 - 1.80\n1.35 - 1.50\n1.65 - 1.80", 
"2.90 - 2.95", "3.05 - 3.12\n3.05 - 3.12", "0.45 - 0.50\n0.65 - 0.70\n0.60 - 0.65", 
"1.58 - 2.08", "1.43 - 1.48", "57.9 - 72.9\n12.5 - 14.5\n0.45 - 0.52\n1.55 - 1.62", 
"1.97 - 2.01.\n1.87 - 1.94.\n2.01 - 2.08\n2.15 - 2.19", "3.25 - 3.34", 
"0.90 - 0.94", "3.45 - 3.55\n0.60 - 0.64\n0.70 - 0.74", "0.05 - 0.08", 
"2.30 - 2.40", "0.35 - 0.37\n0.33 - 0.37.\n1.05 - 1.07", "3.45 - 3.65\n3.45 - 3.65", 
"3.11 - 3.15", "0.75 - 1.00\n1.10 - 1.30", "3.50 - 3.60\n3.47 - 3.57\n3.30 - 3.40\n3.47 - 3.57\n0.10 - 0.15", 
"5.75 - 6.00\n7.00 - 7.50\n0 - 50\n500 - 550", "3.35 - 3.45\n3.30 - 3.45", 
"1.60 - 1.80.\n1.60 - 1.80", "0.98 - 1.03")), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -40L))

编辑:

在删除重复项之前对 grp = 9923 的观察是:

0.26 - 0.31

0.97 - 1.02

1.29 - 1.34   # duplicate

0.26 - 0.97

1.29 - 1.34   # duplicate

然后我在删除重复项后查看观察结果,我得到:

0.26 - 0.31
0.97 - 1.02
1.29 - 1.34

它已正确删除了重复项,但也删除了不是重复项的观察值 0.26 - 0.97

最佳答案

您可以在 strsplit 之后使用 unique,然后再次将它们粘贴 在一起,例如:

sapply(lapply(strsplit(d$figures, "\n"), unique), paste, collapse="\n")

一个循环但输入更多但可能更快:

lapply(strsplit(d$figures, "\n"), function(x) paste(unique(x), collapse="\n"))

关于删除每个单元格内新行中的重复观察值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61658144/

相关文章:

r - 生成集进行交叉验证

r - 如何编写嵌套的 IF 和 RAND excel 语句

r - 在 R 中转换 data.frame 的命令

r - Shiny - 使用 insertUI 的动态数据过滤器

r - 生成N个随机整数,总和为R中的M

r - 保持点在gganimate

r - 使用 R 中的 nlme 重复测量分析分离固定效应进行分析

r - 更改 ggplot2 中刻度的位置(在绘图内)

r - 防止 spData::world 国家环绕 map /裁剪 map 区域

r - 使用 map 函数过滤具有列表名称的 data.frame 元素