簡體   English   中英

根據其他人的內容添加額外的列(在R中)

[英]Add additional column based on the content of others (in R)

我有一個帶有 3 個 qc 的數據框。 我想創建第 4 列,其結果將取決於所有 3 個 qc。 條件:至少 2 個必須為“壞”才能在 qc4 中顯示為壞,否則為好。

  ID qc1  qc2  qc3
1 AV bad  good bad
2 AX bad  bad  bad
3 AS good good good
4 AW good bad  bad

結果

  ID qc1  qc2  qc3  q4
1 AV bad  good bad  bad
2 AX bad  bad  bad  bad
3 AS good good good good
4 AW good bad  bad  bad

我們可以使用ifelse rowSums邏輯向量的值創建“壞”、“好”

nm1 <- grep("^qc\\d+$", names(df), value = TRUE)
df$q4 <- ifelse(rowSums(df[nm1] == "bad") >=2, "bad", "good")
df
#  ID  qc1  qc2  qc3   q4
#1 AV  bad good  bad  bad
#2 AX  bad  bad  bad  bad
#3 AS good good good good
#4 AW good  bad  bad  bad

或者另一種選擇是使用rowwise/c_acrossdplyr

library(dplyr)
df %>% 
   rowwise %>%
   mutate(q4 = c("good", "bad")[1+(sum(c_across(starts_with('qc')) ==
       'bad') >= 2)]) %>%
   ungroup

數據

df <- structure(list(ID = c("AV", "AX", "AS", "AW"), qc1 = c("bad", 
"bad", "good", "good"), qc2 = c("good", "bad", "good", "bad"), 
    qc3 = c("bad", "bad", "good", "bad")), class = "data.frame",
    row.names = c("1", 
"2", "3", "4"))

另一個使用rowSums基本 R 選項

df$qc4 <- c("good", "bad")[1 + (rowSums(df == "bad") >= 2)]

這樣

> df
  ID  qc1  qc2  qc3  qc4
1 AV  bad good  bad  bad
2 AX  bad  bad  bad  bad
3 AS good good good good
4 AW good  bad  bad  bad

數據

> dput(df)
structure(list(ID = c("AV", "AX", "AS", "AW"), qc1 = c("bad", 
"bad", "good", "good"), qc2 = c("good", "bad", "good", "bad"),
    qc3 = c("bad", "bad", "good", "bad"), qc4 = c("bad", "bad",
    "good", "bad")), row.names = c("1", "2", "3", "4"), class = "data.frame")

暫無
暫無

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

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