在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的向量
发布于 2013-05-22 22:45:24
您可以使用ifelse函数:
df$Value <- ifelse(df$Category=="A",qnorm(df$A,0,1),qnorm(df$B,0,1))发布于 2016-01-07 02:38:35
对于更复杂的类别排列,我建议将其分解为多个语句。就像这样
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))https://stackoverflow.com/questions/16694463
复制相似问题