在公式中使用 FOR 循環創建新列<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />大家好,我有一個關於如何將表中創建的許多列組合成一個新列的問題,該列描述這些列中的任何一個是否具有特定的 char 值(“已篩選”)。
目前,我的數據集使用腳本進行分析,該腳本根據腳本中的公式添加“n”個新列,其中包含“已篩選”和“未篩選”的字符值。
我的目標是在腳本中包含一個最後一步,該步驟添加一個新列,該列評估每個“n”個新列中的值,如果對於每一行,這些列中的任何一個都被“篩選”,那麼它將該行標記為已篩選.
如果新列的數量始終相同,我將只編寫一個較長的 If 語句,檢查每列中的值。 但是,我需要編寫腳本來查看“n”個列。 我想在論壇中使用 FOR 循環,例如:
dt << New Column("All_screens",character,nominal,setformula(
If( For( i = 1, i <= N 項(單個屏幕列)、個人屏幕列== "Screened"), ---> 需要一些魔法,如果任何篩選列包含 screen,那麼 ---> "Screened", "Unscreened" ) );
但由於 FOR 循環不返回任何值,我無法弄清楚這個魔法。 有人有想法嗎?
謝謝,
- 桃
回复:在公式中使用 FOR 循環創建新列跨列公式中未知數量的列的逐行操作的實現不是很簡單(但不需要魔法)。
以下是一些利用局部變量的想法:
// 只是一個示例表
n = 5 ;
天然橡膠= 10 ;然而
dt =新表( 《篩選總結》 ,添加行(天然橡膠) ,添加多列( “X” , n ,特點)) ;
為了(一世= 1 ,一世<= n ,一世++,
柱子( dt ,一世) <<設置每個值({ “篩選” , “未篩選” }[ 1 + (隨機整數( 1 ,天然橡膠) > 1 )])
) ;
// 新列指示是否有任何列包含“screened”
dt <<新列( “篩選” ,
特點,
公式(
當地的({一世= 0 , n = N 科爾(當前數據表()) - 1 } ,
如果(包含(重複({一世++ ;柱子(一世)[]} , n ) , “篩選” ) ,
“篩選”
)
)
)
) ;
// 相同,但帶有 For() 循環;不太整潔的代碼,但對於大 n 可能比 Repeat() 更有效
// 因為沒有建立中間列表
dt <<新列( 《放映2》 ,
特點,
公式(
當地的({一世, n = N 科爾(當前數據表()) - 2 , s = “” } ,
為了(一世= 1 ,一世<= n ,一世++,
如果(柱子(一世)[] == “篩選” ,
s = “篩選” ;
休息() ;
)
) ;
s ;
)
)
) ;
// 或者,返回 nr of "screened"
dt <<新列( “篩選人數” ,
數字,
公式(當地的({一世= 0 , n = N 科爾(當前數據表()) - 3 } ,和(重複({一世++ ;柱子(一世)[] == “篩選” } , n )))) ) ;
回复:在公式中使用 FOR 循環創建新列謝謝吉姆。因為我不知道列數,所以我會嘗試使用 for 循環將您的方程放入 expr() 中,然後使用 for 循環中生成的表達式的 eval() 將其移至 if 語句.
回复:在公式中使用 FOR 循環創建新列我使用布爾求和來解決您正在談論的問題。如果您有 4 列 a、b、c、d,我使用的公式為:
if(sum(a=="screened",b=="screened",c=="screened",d=="screened")>0, "screened","")