R子集数据和处理空结果

时间:2013-07-01 00:09:00

标签: r subset

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

通常,我使用像

这样的子集
trx[which(trx$Currency == "EUR"),]$ExchangeOriginal<- 1

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

trx$Currency

值为“EUR”。

有什么聪明的方法可以解决这个问题?有什么像

On Error Resume next

2 个答案:

答案 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)