在一组数据框中删除重复的列 r

3

我有一个包含多个数据框的列表。每个数据框都包含重复的列。我想返回每个数据框中唯一的列。我尝试了几种代码,包括下面的代码,但仍然出现错误。我目前正在使用的代码如下,以及我的列表中第一个数据框的描述也列出了。感谢任何帮助。

x  <- lapply(dataFiles, function(x){
  for(i in 1:length(colnames(dataFiles)))
  dataFiles[[!duplicated(dataFiles[[i]])]]
}
)



str(dataFiles[[1]])
'data.frame':   20381 obs. of  10 variables:
 $ FILEID    : chr  "ACSSF" "ACSSF" "ACSSF" "ACSSF" ...
 $ FILETYPE  : num  2.01e+08 2.01e+08 2.01e+08 2.01e+08 2.01e+08 ...
 $ STUSAB    : chr  "ny" "ny" "ny" "ny" ...
 $ CHARITER  : int  0 0 0 0 0 0 0 0 0 0 ...
 $ SEQUENCE  : int  1 1 1 1 1 1 1 1 1 1 ...
 $ LOGRECNO  : int  3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 ...
 $ B00001_001: int  212 215 278 246 235 NA 225 522 213 262 ...
 $ B00002_001: int  108 124 126 105 122 NA 108 105 104 140 ...
 $ LOGRECNO  : int  3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 ...
 $ GEOID     : chr  "14000US36001000100" "14000US36001000200" "14000US36001000300" "14000US36001000401" ...

@David LOGRECNO 是一个重复的列。 - user3067851
1个回答

5
这是一个简单的示例:
tmp <- data.frame(seq(10), seq(10), rnorm(10))
colnames(tmp) <- c("A","A","B")

l <- list(tmp, tmp)

lapply(l, function(x) x[,!duplicated(colnames(x))])

或者,如@agstudy所指出的,您可以使用unique

lapply(l, function(x) x[,unique(colnames(x))])

unique将返回每个列仅一次,!duplicated将返回仅出现一次的列,no?? - latorrefabian
@latorrefabian 不行。x = c(1, 1, 2); x[!duplicated(c(1, 1, 2))]。(得到 #[1] 1 2)。另请参阅 ?duplicated如何删除所有重复项,以便不留下任何一个? - Gregor Thomas
@ cdeterman...太简单了。我没有想到这些,因为我正在使用数据框的列表。谢谢。 - user3067851

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接