簡體   English   中英

R 刪除數據幀中的常用列

[英]R remove common columns in dataframes

我有 2 個 dfs(簡化示例):

    df1 a b c g ... 
        1 0 0 0
        2 0 0 1

    df2 a b d e f ...
        1 1 0 0 0
        2 0 0 0 1

我想合並 2 個 dfs,但在加入之前,我想刪除 df1 和 df2 中的公共列。 所以我會保留列 (c,d,e,f,g),因為 a 和 b 在 df1 和 df2 中很常見。

所以基本上與這里回答的相反

刪除數據框中與另一個不同的列(R)

在基礎 R 中,您可以從使用duplicated的 function 開始計算出兩個數據幀共有的列名。 從那里,只需從每個數據框中選擇和綁定不在此列表中的列即可。

dupes <- c(names(df1), names(df2))[duplicated(c(names(df1), names(df2)))]

df3 <- cbind(df1[, -which(names(df1) %in% dupes)], df2[, -which(names(df2) %in% dupes)])

按照您的示例,這將生成以下數據框,僅包含來自其他每個列的唯一列。 這是基於兩個數據幀具有相同行數的假設。

df3 c g d e f ...
    0 0 0 0 0
    0 1 0 0 1

使用集合操作,即。 union intersectsetdiff在兩個 dfs 的names上,我們可以這樣做

df1 <- read.table(header = T, text = 'a b c g
        1 0 0 0
        2 0 0 1')

df2 <- read.table(header = T, text = 'a b d e f
        1 1 0 0 0
        2 0 0 0 1')

# uncommon column names
x <- setdiff(union(names(df1), names(df2)), intersect(names(df1), names(df2)))

cbind(df1[names(df1) %in% x], df2[names(df2) %in% x])
#>   c g d e f
#> 1 0 0 0 0 0
#> 2 0 1 0 0 1

代表 package (v2.0.0) 於 2021 年 6 月 15 日創建

您可以使用 dplyr package 來做到這一點:

df1 <- df1 %>%
   select(c,d,e,f,g)

dplyr package 中的 select() 保留您要保留的列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM