额外的信息增加了一个有趣的细节!如果您不在乎连接列名,您可以尝试以下方法:
df <- data.frame(c1 = c(1,0,0), c2 = c(0,0,1), c3 = c(1,1,0), c4 = c(1,1,0), c5 = c(1,1,1), c6= c(1,1,1), c7 = c(2,2,2))
library(digest)
df_clean <- df[!duplicated(lapply(df, digest))]
此时,df_clean将包含不带任何重复项的数据框。
如果列名确实很重要,那么在查看了thepule的答案后,我会这样做:
df_dups <- df[duplicated(lapply(df, digest))]
for (clean_col in 1:ncol(df_clean)){
for (dup_col in 1:ncol(df_dups)){
if (identical(df_clean[,clean_col], df_dups[,dup_col]) == TRUE){
colnames(df_clean)[clean_col] <- paste(colnames(df_clean)[clean_col], colnames(df_dups)[dup_col], sep = "")
}
}
}
添加了额外重复项进行测试后的输出如下:
'data.frame': 3 obs. of 5 variables:
$ c1 : num 1 0 0
$ c2 : num 0 0 1
$ c3c4: num 1 1 0
$ c5c6: num 1 1 1
$ c7 : num 2 2 2