1

我正在对数据框进行大量操作以重塑我的数据。

通常,我使用子集,例如

trx[which(trx$Currency == "EUR"),]$ExchangeOriginal<- 1

但是,当我将我的函数应用于某些子集不存在的数据时,该函数将失败。例如,如果没有

trx$Currency

“欧元”的值。

有什么聪明的方法来处理这个问题?有没有类似的东西

On Error Resume next
4

2 回答 2

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)
于 2013-07-01T00:36:09.170 回答
0

另一种方法使用within

within(trx, if(exists("Currency")) ExchangeOriginal[Currency == "EUR"] <- 1)
于 2013-07-01T03:14:10.707 回答