【发布时间】:2019-01-07 16:19:10
【问题描述】:
我有一个包含各种 UTM 源/媒体的 DataFrame,我想对其进行分段,例如,对于 UTM_source = 123 和 UTM_medium = ABC/BCD 的行,我想指定名称“123ABC”。我有超过 50 行这样的行,其中包含各种来源和媒体的许多组合,所有其他组合都以“其他”结尾。
问题是,当我想将值分配给不存在的组合时,会发生错误并破坏函数。为了使代码正常工作,我必须手动检查所有 50 多种组合,然后运行其余代码。
segment_my_DF <- function(DF) {
DF$segment <- NA
# segment based on source and medium
DF[!is.na(DF$UTMSource__c) & !is.na(DF$UTMMedium__c) &
DF$UTMSource__c =="123" & DF$UTMMedium__c =="ABC", ]$segment =
"123ABC"
DF[!is.na(DF$UTMSource__c) & !is.na(DF$UTMMedium__c) &
DF$UTMSource__c =="123" & DF$UTMMedium__c =="BCD", ]$segment =
"123ABC"
DF[!is.na(DF$UTMSource__c) & !is.na(DF$UTMMedium__c) &
DF$UTMSource__c =="234" & DF$UTMMedium__c =="ABC",
]$segment = "234ABC"
...
# pack all the others
DF[is.na(DF$segment), ]$segment = "OTHERS"
return(DF)
}
假设我拥有的 DataFrame 没有 UTM_Source = '123' 和 UTM_Medium = 'ABC' 的任何行。我收到的错误信息是:
Error in `$<-.data.frame`(`*tmp*`, "segment", value = "B2B") :
replacement has 1 row, data has 0
我希望这个函数能走得更远,就像一个“if”语句。我尝试在函数内使用 try()(都带有 () 和 {} 括号):
segment_my_DF <- function(DF) {
DF$segment <- NA
# segment based on source and medium
try(
...
)
# pack all the others
DF[is.na(DF$segment), ]$segment = "OTHERS"
return(DF)
}
它使函数立即崩溃。我尝试在调用函数时使用 try()(都带有 () 和 {} 括号):
segmented_Marketing <- try({segment_my_DF(Rest)})
它也不起作用。我应该如何处理这个问题?我想到的一件事是将所有这 50 多个条件包装在 50 多个“if”语句中,但必须有一种更简单的方法。
【问题讨论】:
标签: r error-handling