從我的資料框中,我需要洗掉標記為“未完成”的無用資訊,并從重復的 ID 中保留有趣的“否定”。抱歉不容易解釋。所以,我的資料框如下:
df <- data.frame(ID = c("A1", "A1", "A1", "A2", "A2","A2", "A3","A3", "A3"),
Variable1 = c("Neg", "Not Done","Not Done", "Not Done", "Neg", "Not Done", "Not Done", "Not Done", "Not Done"),
Variable2 = c("Not Done", "Neg", "Not Done", "Neg", "Not Done", "Not Done", "Not Done", "Not Done", "Not Done"),
Variable3 = c("Not Done","Not Done","Neg","Not Done","Not Done","Neg","Not Done","Not Done","Not Done"))
預期輸出的一個例子:
df_A <- data.frame(ID = c("A1", "A2", "A3"),
Variable1 = c("Neg", "Neg", "Not Done"),
Variable2 = c("Neg", "Neg", "Not Done"),
Variable3 = c("Neg","Neg","Not Done"))
如您所見,A3,所有值都是“未完成”,因此需要保留一次。
uj5u.com熱心網友回復:
一個dplyr解決方案which.max():
library(dplyr)
df %>%
group_by(ID) %>%
summarise(across(.fns = ~ .x[which.max(.x == "Neg")])) %>%
ungroup()
# # A tibble: 3 × 4
# ID Variable1 Variable2 Variable3
# <chr> <chr> <chr> <chr>
# 1 A1 Neg Neg Neg
# 2 A2 Neg Neg Neg
# 3 A3 Not Done Not Done Not Done
uj5u.com熱心網友回復:
如果只有Neg并且Not Done我會將它們轉換為andTRUE并FALSE使用.anyaggregate
aggregate(df[-1]=="Neg", df[1], any)
# ID Variable1 Variable2 Variable3
#1 A1 TRUE TRUE TRUE
#2 A2 TRUE TRUE TRUE
#3 A3 FALSE FALSE FALSE
uj5u.com熱心網友回復:
library(dplyr)
df$ID <- factor(df$ID)
ID <- factor(df$ID)
df <- distinct(df)
neg_find <- function(vector) {
result <- "Neg" %in% vector
return(result)
}
final_result_neg <- function(dataframe) {
t <- tapply(dataframe, ID,neg_find)
return(t)
}
df2 <- apply(df, 2, final_result_neg)%>%data.frame()
df2$ID <- NULL
df2[df2==TRUE] <- 'Neg'
df2[df2==FALSE] <- 'Not Done'
df2
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/480412.html
