我正在对数据帧进行大量操作以重塑我的数据。
通常,我使用像
这样的子集trx[which(trx$Currency == "EUR"),]$ExchangeOriginal<- 1
但是,当我将函数应用于某些子集不存在的数据时,该函数将失败。例如,如果没有
trx$Currency
值为“EUR”。
有什么聪明的方法可以解决这个问题?有什么像
On Error Resume next
答案 0 :(得分:3)
对于您的特定示例,选择要在括号运算符中设置其值的列将避免此问题:
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)
答案 1 :(得分:0)
使用within
的另一种方法:
within(trx, if(exists("Currency")) ExchangeOriginal[Currency == "EUR"] <- 1)