[英]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 中,您可以從使用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
intersect
和setdiff
在兩個 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.