[英]How to remove duplicated rows based on 3 columns for only one factor level?
我有一個包含130
數據框的列表,每個數據框有27
列,每個數據框有2
因子級別。 我想刪除每個數據框中的重復行,僅基於一個因子級別的3
列,保留另一個因子級別中的所有行及其重復項。
我已經根據因子級別對所有數據框進行了排序,然后我嘗試僅刪除第一個因子級別的重復行。
該列表在列表中的數據幀之間稱為x
和i
索引,其中包含x[[i]]
,其中i
從1
到130
運行。
每個名為temp
數據框中的列包含2
因子水平, 0
或1
。 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.