我有一个数据集,其中一列包含逗号分隔的值列表(其中一些是重复的).

我可以使用Separate()将该列拆分为多个列,但如何删除任何重复的值呢?

每一行都是唯一的,我希望保留所有行,只需删除每行中的重复值

这是我所拥有的:

ID Column A
1 "A"
2 "B,C"
3 "D,D,E"
4 "A,D"

这就是我想要的:

ID Column A Column B
1 A NA
2 B C
3 D E
4 A D

我试着try 使用唯一的和复制的,有/没有strplit和/或lApply,但就是想不出什么似乎是一个相当简单的任务

请帮帮忙好吗?

推荐答案

Base R

tmp <- lapply(strsplit(quux[["Column A"]], ","), unique)
tmp <- lapply(tmp, `length<-`, max(lengths(tmp)))
tmp <- do.call(rbind, tmp)
colnames(tmp) <- paste0("col", 1:ncol(tmp))
cbind(quux, tmp)
#   ID Column A col1 col2
# 1  1        A    A <NA>
# 2  2      B,C    B    C
# 3  3    D,D,E    D    E
# 4  4      A,D    A    D

Another tidyverse option:

library(dplyr)
library(tidyr)
separate_longer_delim(quux, `Column A`, delim = ",") |>
  distinct() |>
  mutate(row = row_number(), .by = ID) |>
  pivot_wider(id_cols = ID, names_from = row, values_from = `Column A`)
# # A tibble: 4 × 3
#      ID `1`   `2`  
#   <int> <chr> <chr>
# 1     1 A     NA   
# 2     2 B     C    
# 3     3 D     E    
# 4     4 A     D    

数据

quux <- structure(list(ID = 1:4, "Column A" = c("A", "B,C", "D,D,E", "A,D")), class = "data.frame", row.names = c(NA, -4L))

R相关问答推荐

使用rlang s arg_match判断函数输入列表

使用ggcorrplot在相关性矩阵上标注supertitle和index标签

为什么当我try 在收件箱中使用合并功能时会出现回收错误?

更改编号列表的 colored颜色

在连续尺度上转置标签[瀑布图,R]

从一个列表的框架中移除列表包装器

从圆到R中的多边形的标绘雷达图

如何在R中平滑地绘制线图(不拟合)?

使用RSelenium在R中抓取Reddit时捕获多个标签

如何将一列中的值拆分到R中各自的列中

如何在ggplot2中创建多个y轴(每个变量一个)

为什么在写入CSV文件时Purrr::Pwalk不起作用

Rmarkdown::Render vs Source()

如何在AER::ivreg中指定仪器?

有没有办法更改ggplot2中第二个y轴的比例限制?

如何在R中的两列以上使用联合(&U)?

将R中对象的CSV数组转换为JSON数组

使用显式二元谓词子集化sfc对象时出错

动态统计函数在ShinyApp内部更改

如何在GGPlot中控制多个图例和线型