[英]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.