簡體   English   中英

如何僅針對一個因子級別刪除基於 3 列的重復行?

[英]How to remove duplicated rows based on 3 columns for only one factor level?

在此處輸入圖片說明

我有一個包含130數據框的列表,每個數據框有27列,每個數據框有2因子級別。 我想刪除每個數據框中的重復行,僅基於一個因子級別的3列,保留另一個因子級別中的所有行及其重復項。

我已經根據因子級別對所有數據框進行了排序,然后我嘗試僅刪除第一個因子級別的重復行。

該列表在列表中的數據幀之間稱為xi索引,其中包含x[[i]] ,其中i1130運行。

在此處輸入圖片說明

在此處輸入圖片說明

每個名為temp數據框中的列包含2因子水平, 01 130數據幀已根據level = 0首先排序,然后level=1

for (i in 1:130)
{
x[[i]]$temp <- factor(x[[i]]$temp,levels = c(0,1)) 

# Creating 2 factor levels called `0` and `1` in column called `temp` and index position of the `temp` column is `24`

x[[i]] <- x[[i]][order(x[[i]]$temp),] 

# Ordering all of the dataframes by levels; level = 0 first then level = 1

x[[i]] <- x[[i]][!(duplicated(x[[i]][c(2,27,25)])),] 

# This is removing duplicated based on columns 2,27 and 25, but I to perform this only for the first factor level = 0
}

對於單個數據框,比如說df ,您可以執行以下操作:

library(dplyr)
df %>% distinct(temp, 2, 27, 25, .keep_all = TRUE)

請注意,您不必考慮對因子進行分組,因為如果兩個因子的行都具有重復值的列 2、27 和 25,它們仍然是兩個不同的列。

這里的關鍵是參數.keep_all ,它保留剩余的列。 但是請注意,如果剩余的列在某些原因上有所不同,則不確定您返回哪些行,對於temp和第 2、27 和 25 列的每個不同組合,您只會獲得 1 行。

要擴展到 data.frames 列表,您可以使用lapply

lapply(x, function(df) {
  df %>% distinct(temp, 2, 27, 25, .keep_all = TRUE)
}) %>% bind_rows(.id='date')

其中對bind_rows的最后一次調用只是將所有內容壓縮到單個數據框中,並添加.id參數以添加名為date的列,其值應為輸入列表中的條目名稱。

暫無
暫無

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

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