3

Rプログラミングでは、次のことを試みます。

    df
    A       B     Category
    0.9     0.85  A
    0.7     0.75  B
    0.8     0.90  B

    CSF <- function(df, type) {
    switch(type,
               "A" = qnorm(df$A, 0 , 1),
               "B" = qnorm(df$B, 0 , 1)
    )
    }

    df<-data.frame(df, value = CSF(df,df$category))

望ましい結果:

    df
    A       B     Category     Value
    0.9     0.85  A            qnorm(0.9, 0, 1)*
    0.7     0.75  B            qnorm(0.75, 0, 1)*
    0.8     0.90  B            qnorm(0.9, 0, 1)*

*: 実数値

エラー メッセージ: EXPR は長さ 1 のベクトルでなければなりません

4

2 に答える 2

3

ifelse次の関数を使用できます。

df$Value <- ifelse(df$Category=="A",qnorm(df$A,0,1),qnorm(df$B,0,1))
于 2013-05-22T14:45:24.197 に答える
0

より複雑なカテゴリの配置については、複数のステートメントに分割することをお勧めします。何かのようなもの

df$CSF <- NA
df.split <- split(df, df$Category)
df.split$A$CSF <- qnorm(df.split$A$A, 0, 1)
df.split$B$CSF <- qnorm(df.split$B$B, 0, 1)
...

そして、それらを再びマージします

df <- unsplit(df.split, df$Category)

「単一の式」の優雅さはありませんが、タスクを達成するために膨大な量のネストを回避することもできます。次を使用して、個々の式を簡略化できますwithin

df.split$A <- within(df.split$A, CSF <- qnorm(A, 0 0))
于 2016-01-06T18:38:34.873 に答える