【发布时间】:2021-02-24 19:17:13
【问题描述】:
我正在使用 R 进行一个项目,该项目需要我将一堆不同的货币更改为美元。我首先使用以下代码将数值与相关货币分开,并将它们放在两个新列中:
```
#Extract numeric values from budget
dataframe$BudgetNum <- as.numeric(str_extract(dataframe$budget, "[0-9]+"))
#Extract character (currency) values from budget
dataframe$BudgetCurrency <- str_extract(dataframe$budget, "[aA-zZ]+")
```
我现在对如何将不同的货币转换为美元有点困惑。我尝试使用 if 语句创建一个函数,然后在 sapply() 中运行该函数,但它使我的 R 崩溃:
convertCurrency <- function(currencyVal){
if(!is.na(dataframe$BudgetCurrency == 'INR')){
BudgetNum = merge.movies.filter$BudgetNum*0.014
return(BudgetNum)
}
}
**0.014 是印度卢比兑美元汇率
supply() 调用如下:
z <- sapply(dataframe$BudgetCurrency, convertCurrency)
我的几行数据是:
imdb_title budget BudgetNum BudgetCurrency
tt000009 $2500 2500 *NA*
tt0000011 ITL60000 600000 ITL
tt0000012 ROL950000 9500000 ROL
tt0000087 INR52000000 52000000 INR
如果有人可以提供任何建议/帮助,我将不胜感激!如果您需要任何其他信息,请告诉我!
【问题讨论】:
-
到目前为止你做得很好。您可以编辑您的帖子以包含几行数据,并添加您的
sapply()电话吗?谢谢。 -
@DavidJ.Bosak 感谢您的回复!我对 StackOverflow 很陌生,我不知道如何向 cmets 添加代码,所以我用您要求的信息编辑了原始帖子!请让我知道是否有方法可以改进代码或者我是否犯了任何错误。
-
两件事。首先,在您的函数中,您将传递一个变量
function(currencyVal)以在函数内部使用。但是你永远不会在函数内部使用它,而是从全局环境中调用整个数据框。在您的函数中,您可以将向量dataframe$BudgetCurrency替换为单个值currencyVal。 -
第二,这里不需要申请。您可以使用
ifelse()而不是if以矢量形式执行此操作。 -
最后,只有当
!is.na(dataframe$BudgetCurrency)为真时,!is.na(dataframe$BudgetCurrency == 'INR')才会为真。 == 返回 TRUE 或 FALSE,除非一侧为 NA。