簡體   English   中英

比較組數據框的列是否相等

[英]compare columns of groups dataframe for equality

我的目標是比較ID分組的字符串或數字。 因此,如果例如var1均為“ NORMAL”,則新列將顯示TRUE或FALSE。 我知道我可以summarise_all()但我需要它成為另一個項目的新專欄。 我也希望這種比較也適用於數字。 在選擇的列中,所有內容必須完全相同。 其中一些小組的成員超過2名。

df <- structure(list(ID = c("A1.1234567", "A1.12345"), 
                 var1 = c("NORMAL", "NORMAL"), 
                 var2 = c("NORMAL", "NORMAL"), 
                 var3 = c("NORMAL", "NORMAL"), 
                 var4 = c("NORMAL", "NORMAL"), 
                 var5 = c("NORMAL", "NORMAL"), 
                 var6 = c("NORMAL", "NORMAL"), 
                 var7 = c("25", "25"), 
                 var8 = c("6, 9)),

            .Names = c("ID", "var1", "var2", "var3", "var4", "var5", "var6", "var7", "var8"), 
            class = "data.frame", row.names = c(NA, -2L))

我希望它看起來像

         ID   var1   var2   var3   var4   var5   var6 var7 var8 var7.true va8.true
A1.1234567 NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL  25    6    TRUE   FALSE
A1.1234567 NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL  25    9    TRUE   FALSE

我唯一的想法是將其變異,但我似乎無法正確比較它們

您可以使用mutate_at (而不是mutate_all )來不包含ID因為我們沒有按ID進行分組,並且可以定義要創建的新變量的名稱,以使其不會覆蓋現有變量,即

df %>% 
 mutate_at(vars(-ID), funs(new = ifelse(all(. == 'NORMAL'), TRUE, FALSE)))

這使

  ID var1 var2 var3 var4 var5 var6 var7 var8 var1_new var2_new var3_new var4_new var5_new var6_new var7_new var8_new 1 A1.1234567_10 NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE 2 A1.1234567_20 NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL ABNORMAL NORMAL TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE 

編輯根據您的評論,有幾種方法可以使所有元素均等。 我將唯一值的長度設為1(如果全部相同),即

mutate_at(df, vars(-ID), funs(new = length(unique(.)) == 1))

BONUS現在你不需要使用ifelse因為我們沒有定義的值

暫無
暫無

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

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