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