确定列表中哪些数据帧在R中是唯一的

确定列表中哪些数据帧在R中是唯一的,r,list,dataframe,R,List,Dataframe,我有一个大的数据帧列表。我想确定哪些是唯一的,并为它们指定唯一的名称。举个小例子,但我需要自动化 df1 <- data.frame(a = 1:10, b = 2:11, c = 3:12) df2 <- df1 df3 <- data.frame(b = 2:11, a = 1:10, c = 3:12) # this is 2 unique data frames dfs <- list(df1, df2, df3) names(dfs) <- c('d

我有一个大的数据帧列表。我想确定哪些是唯一的,并为它们指定唯一的名称。举个小例子,但我需要自动化

df1 <- data.frame(a = 1:10, b = 2:11, c = 3:12)
df2 <- df1
df3 <- data.frame(b = 2:11, a = 1:10, c = 3:12)

# this is 2 unique data frames 

dfs <- list(df1, df2, df3)
names(dfs) <- c('df1', 'df2', 'df3')

df1
dfs我们可以使用
lappy
来迭代
unique\u df
transform
来添加新列

unique_df <- unique(dfs)

lapply(seq_along(unique_df), function(i) 
      transform(unique_df[[i]], unique_id = paste0("unique", i)))


#[[1]]
#    a  b  c unique_id
#1   1  2  3   unique1
#2   2  3  4   unique1
#3   3  4  5   unique1
#4   4  5  6   unique1
#5   5  6  7   unique1
#6   6  7  8   unique1
#7   7  8  9   unique1
#8   8  9 10   unique1
#9   9 10 11   unique1
#10 10 11 12   unique1

#[[2]]
#    b  a  c unique_id
#1   2  1  3   unique2
#2   3  2  4   unique2
#3   4  3  5   unique2
#4   5  4  6   unique2
#5   6  5  7   unique2
#6   7  6  8   unique2
#7   8  7  9   unique2
#8   9  8 10   unique2
#9  10  9 11   unique2
#10 11 10 12   unique2

我们可以使用
match
获得唯一元素的索引,并使用
Map
base R

Map(cbind,  dfs, unique_df = paste0("unique_", match(dfs, unique(dfs))))
#$df1
#    a  b  c unique_df
#1   1  2  3  unique_1
#2   2  3  4  unique_1
#3   3  4  5  unique_1
#4   4  5  6  unique_1
#5   5  6  7  unique_1
#6   6  7  8  unique_1
#7   7  8  9  unique_1
#8   8  9 10  unique_1
#9   9 10 11  unique_1
#10 10 11 12  unique_1

#$df2
#    a  b  c unique_df
#1   1  2  3  unique_1
#2   2  3  4  unique_1
#3   3  4  5  unique_1
#4   4  5  6  unique_1
#5   5  6  7  unique_1
#6   6  7  8  unique_1
#7   7  8  9  unique_1
#8   8  9 10  unique_1
#9   9 10 11  unique_1
#10 10 11 12  unique_1

#$df3
#    b  a  c unique_df
#1   2  1  3  unique_2
#2   3  2  4  unique_2
#3   4  3  5  unique_2
#4   5  4  6  unique_2
#5   6  5  7  unique_2
#6   7  6  8  unique_2
#7   8  7  9  unique_2
#8   9  8 10  unique_2
#9  10  9 11  unique_2
#10 11 10 12  unique_2

您知道如何解决我的最后一个问题吗?现在将适当的唯一id添加到原始列表中?在
unique1
unique2
列中,值应该是什么?@RonakShah我的意思是应该有一个名为“unique_id”的新列,这些值应该是“unique1”,对于df1和df2,对于DF3,应该是“unique2”,您正在创建
unique(dfs)
并命名它。你能更清楚地了解预期的结果吗output@user42485你能查一下我的最新情况吗?我的问题好像不清楚。在本例中,我需要3个命名数据帧的原始列表。我希望每个列表中都有一个具有唯一ID的额外项目。我希望保留df名称和唯一标识符。谢谢@user42485好的,如果你能用预期的输出更新你的帖子,你真正想要的东西就会变得更清楚
dfs<-unique(dfs)
names(dfs) <- c(paste0('unique_', 1:length(unique(dfs)))) 
dfs

$unique_1
    a  b  c
1   1  2  3
2   2  3  4
3   3  4  5
4   4  5  6
5   5  6  7
6   6  7  8
7   7  8  9
8   8  9 10
9   9 10 11
10 10 11 12

$unique_2
    b  a  c
1   2  1  3
2   3  2  4
3   4  3  5
4   5  4  6
5   6  5  7
6   7  6  8
7   8  7  9
8   9  8 10
9  10  9 11
10 11 10 12
unique_df <- unique(dfs)

lapply(seq_along(unique_df), function(i) 
      transform(unique_df[[i]], unique_id = paste0("unique", i)))


#[[1]]
#    a  b  c unique_id
#1   1  2  3   unique1
#2   2  3  4   unique1
#3   3  4  5   unique1
#4   4  5  6   unique1
#5   5  6  7   unique1
#6   6  7  8   unique1
#7   7  8  9   unique1
#8   8  9 10   unique1
#9   9 10 11   unique1
#10 10 11 12   unique1

#[[2]]
#    b  a  c unique_id
#1   2  1  3   unique2
#2   3  2  4   unique2
#3   4  3  5   unique2
#4   5  4  6   unique2
#5   6  5  7   unique2
#6   7  6  8   unique2
#7   8  7  9   unique2
#8   9  8 10   unique2
#9  10  9 11   unique2
#10 11 10 12   unique2
library(dplyr)
purrr::map(seq_along(unique_df), ~unique_df[[.x]] %>% mutate(unique_id = .x))
Map(cbind,  dfs, unique_df = paste0("unique_", match(dfs, unique(dfs))))
#$df1
#    a  b  c unique_df
#1   1  2  3  unique_1
#2   2  3  4  unique_1
#3   3  4  5  unique_1
#4   4  5  6  unique_1
#5   5  6  7  unique_1
#6   6  7  8  unique_1
#7   7  8  9  unique_1
#8   8  9 10  unique_1
#9   9 10 11  unique_1
#10 10 11 12  unique_1

#$df2
#    a  b  c unique_df
#1   1  2  3  unique_1
#2   2  3  4  unique_1
#3   3  4  5  unique_1
#4   4  5  6  unique_1
#5   5  6  7  unique_1
#6   6  7  8  unique_1
#7   7  8  9  unique_1
#8   8  9 10  unique_1
#9   9 10 11  unique_1
#10 10 11 12  unique_1

#$df3
#    b  a  c unique_df
#1   2  1  3  unique_2
#2   3  2  4  unique_2
#3   4  3  5  unique_2
#4   5  4  6  unique_2
#5   6  5  7  unique_2
#6   7  6  8  unique_2
#7   8  7  9  unique_2
#8   9  8 10  unique_2
#9  10  9 11  unique_2
#10 11 10 12  unique_2