[英]Apply ifelse logic to all columns with shared prefix in R
a<-c("a_1", "a_2", "a_3", "a_4", "b_5", "b", "b_9", "c", "c1", "c_1")
x<-c(0,0,0,1,"a",5,8,0,0,9)
y<-c(0,0,1,0,"b",5,8,0,0,9)
z<-c(0,0,0,0,"c",5,8,0,0,9)
y.df<-as.data.frame(t(data.frame(x,y,z)))
colnames(y.df)<-a
y.df$a_1<-as.numeric(y.df$a_1)
y.df$a_2<-as.numeric(y.df$a_2)
y.df$a_3<-as.numeric(y.df$a_3)
y.df$a_4<-as.numeric(y.df$a_4)
y.df
a_1 a_2 a_3 a_4 b_5 b b_9 c c1 c_1
0 0 0 1 50 5 8 0 0 9
0 0 1 0 50 5 8 0 0 9
0 0 0 0 50 5 8 0 0 9
我有一個類似於上面的示例數據的 data.frame,其中我有一系列共享相同后綴的列(除了在實際數據中,還有更多列 - 因此需要這個問題)。 我想要一種方法將相同的ifelse
子句應用於共享前綴的所有列,而不必顯式寫出每列的名稱(因為在我的真實數據中我有 40 多列)。 因此,在此示例中,我想要一個基於ifelse
邏輯的值為PASS
或FAIL
的新列,該邏輯使用具有相同前綴的所有列。 如果列數像上面的示例一樣受到限制,我將如何處理它:
y.df$test<-ifelse(y.df$a_1 == 0 & y.df$a_2 == 0 & y.df$a_3 == 0 & y.df$a_4 == 0, "FAIL", "PASS")
y.df
a_1 a_2 a_3 a_4 b_5 b b_9 c c1 c_1 test
0 0 0 1 50 5 8 0 0 9 PASS
0 0 1 0 50 5 8 0 0 9 PASS
0 0 0 0 50 5 8 0 0 9 FAIL
我嘗試了以下但無濟於事:
ifelse("a_" %in% colnames(y.df) == 0, "PASS", "FAIL")
你可以做
y.df$test <- ifelse(rowSums(y.df[, grepl("a_*", names(y.df))]) == 0, "PASS", "FAIL")
感謝@Gregor。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.