确定列表中哪些数据帧在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')
df1dfs我们可以使用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