【问题标题】:Removing all but one duplicated column with same name R删除除一个具有相同名称 R 的重复列之外的所有列
【发布时间】:2016-09-22 01:08:11
【问题描述】:

我有一个包含大约 200 个列名的数据表,但是,我有几个列重复并且在所有方面都完全相同,即它们具有相同的名称和相同的条目。

我想删除这些重复列中的所有列。

举个例子:

Code         AEE       AEE      Code      AEE    EPI       Code     AEPI
20/09/1991  4562.43 108.13  20/09/1991  2017698 60.16   20/09/1991  18309
23/09/1991  4578.89 108.52  23/09/1991  2017698 56.55   23/09/1991  18309
24/09/1991  4578.89 108.52  24/09/1991  2017698 58.36   24/09/1991  18309
25/09/1991  4631.04 109.76  25/09/1991  2017698 56.55   25/09/1991  18309
26/09/1991  4665.34 110.57  26/09/1991  2017698 58.36   26/09/1991  18309

如您所见,代码列经常重复。

Doing:Data[, Code := NULL] 只删除第一个“代码”,而不删除其他代码。

理想的输出应该是这样的:

    Code       AEE   AEE     AEE     EPI    AEPI
20/09/1991  4562.43 108.13  2017698 60.16   18309
23/09/1991  4578.89 108.52  2017698 56.55   18309
24/09/1991  4578.89 108.52  2017698 58.36   18309
25/09/1991  4631.04 109.76  2017698 56.55   18309
26/09/1991  4665.34 110.57  2017698 58.36   18309

所以只剩下第一个代码列。 谢谢!

【问题讨论】:

  • 为什么一开始有好几列同名?
  • 这只是数据到达的方式,不是我的选择!

标签: r duplicates data.table


【解决方案1】:

试试这个:

Data <- Data[, !duplicated(lapply(Data, summary))]

【讨论】:

  • 嗨,蒂姆,当我运行此代码时,它只会删除行(其中 100 行)并且不会更改任何列。这是代码应该如何工作的方式吗?
  • @Gin_Salmon 我更新了我的答案以正确地对数据框进行子集化。
  • 我知道代码现在在做什么,所以它应该是所有错误值的子设置,即那些不重复的值。但是,当我运行它时,数据并没有被子集化,而是数据只是成为一个逻辑向量。有什么想法吗?
  • @Gin_Salmon 我认为您错误地复制了我的代码。当我使用它时,我得到一个数据框。您可能缺少逗号。
  • OP 有一个data.table,而您使用的是data.frame-因此混乱-这是什么标签...我猜您只是从这里复制/粘贴了stackoverflow.com/questions/9818125/…
【解决方案2】:

可以按列号删除:

Data[, c(4,7) := NULL]   

Data
#         Code     AEE    AEE     AEE   EPI  AEPI
#1: 20/09/1991 4562.43 108.13 2017698 60.16 18309
#2: 23/09/1991 4578.89 108.52 2017698 56.55 18309
#3: 24/09/1991 4578.89 108.52 2017698 58.36 18309
#4: 25/09/1991 4631.04 109.76 2017698 56.55 18309
#5: 26/09/1991 4665.34 110.57 2017698 58.36 18309

【讨论】:

  • 我认为不鼓励按列编号来引用列。
  • @SymbolixAU 我不知道。您有任何支持参考吗?
  • 我同意,有时间和地点,但认为值得注意。
  • 我认为这个答案的问题在于它不是程序化的。 OP 有 200 个列,他想从中删除重复的列,而不是通过目测然后手动删除。
【解决方案3】:

你也可以这样做:

df <- df[,!duplicated(names(df))]

df <- df[,unique(names(df))]

【讨论】:

    猜你喜欢
    • 2021-11-12
    • 2019-11-06
    • 2019-11-14
    • 2012-10-03
    • 2022-01-15
    • 2018-08-17
    • 2022-01-16
    • 2017-11-08
    • 1970-01-01
    相关资源
    最近更新 更多