簡體   English   中英

將 ifelse 邏輯應用於 R 中具有共享前綴的所有列

[英]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邏輯的值為PASSFAIL的新列,該邏輯使用具有相同前綴的所有列。 如果列數像上面的示例一樣受到限制,我將如何處理它:

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.

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