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

R 删除每个单元格内新行中的重复观察值,r,R,我有一些关于新线的观测数据。例如,第17行 > d[17, ] # A tibble: 1 x 2 grp figures <int> <chr> 1 9923 "0.

我有一些关于新线的观测数据。例如,第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

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

我们可以使用
分隔行
获取不同行中的数据,删除重复项并将其粘贴回

library(dplyr)

d %>%
  tidyr::separate_rows(figures, sep = "\n") %>%
  distinct() %>%
  group_by(grp) %>%
  summarise(figures = paste0(figures, collapse = "\n"))

在base R中,我们可以在
'\n'
上拆分字符串,只保留唯一的值

d$figures <- sapply(strsplit(d$figures, '\n'), function(x) 
                     paste0(unique(x), collapse = "\n"))

d$figures您可以在
strsplit
之后使用
unique
,然后将它们再次粘贴在一起,如下所示:

sapply(lapply(strsplit(d$figures, "\n"), unique), paste, collapse="\n")
使用一个循环,但输入更多,但可能更快:

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

带有
stru c

library(dplyr)
library(tidyr)
library(stringr)
d %>% 
  separate_rows(figures, sep="\n") %>%
  distinct %>%
  group_by(grp) %>% 
  summarise(figures = str_c(figures, collapse="\n"))

您想删除这两个副本还是只保留其中一个?我想保留其中一个。第17行中的长度为6,您在编辑中只显示了5<代码>长度(strsplit(d$数字[17],'\n')[[1]])
#[1]6
我知道了,我错了,谢谢!为什么是2圈
sapply
+
Lappy
?打字更少。我添加了一个单循环变量。谢谢谢谢(两个)我已经尝试了两种解决方案,它们删除了一个不重复的观察结果。我做了一个编辑来突出显示它。我在位置
1
4
上有一行
17
0.26-0.31
。可能您更改了示例数据或问题中的文本。
toString
将通过“,”而不是“\n”连接它们。您是对的。我在dplyr中做了,在R基中忘记了。
sapply(lapply(strsplit(d$figures, "\n"), unique), paste, collapse="\n")
lapply(strsplit(d$figures, "\n"), function(x) paste(unique(x), collapse="\n"))
library(dplyr)
library(tidyr)
library(stringr)
d %>% 
  separate_rows(figures, sep="\n") %>%
  distinct %>%
  group_by(grp) %>% 
  summarise(figures = str_c(figures, collapse="\n"))