我正在对数据框进行大量操作以重塑我的数据。
通常,我使用子集,例如
trx[which(trx$Currency == "EUR"),]$ExchangeOriginal<- 1
但是,当我将我的函数应用于某些子集不存在的数据时,该函数将失败。例如,如果没有
trx$Currency
“欧元”的值。
有什么聪明的方法来处理这个问题?有没有类似的东西
On Error Resume next
对于您的特定示例,选择列以在括号运算符内设置其值将避免该问题:
trx <- data.frame(Currency="XXX", ExchangeOriginal=30)
trx[trx$Currency == "EUR", "ExchangeOriginal"] <- 1 # Does nothing
(另请注意,由于您可以使用布尔表达式进行子集化,因此不需要“which”。)
回答你的第二个问题,可以在这里使用 try 和 tryCatch 函数从错误中恢复,但如果可能的话,最好首先避免错误:
try(trx[trx$Currency == "EUR", ]$ExchangeOriginal <- 1)
另一种方法使用within
:
within(trx, if(exists("Currency")) ExchangeOriginal[Currency == "EUR"] <- 1)