【问题标题】:How to only get one variable when applying a function应用函数时如何只获取一个变量
【发布时间】:2022-06-15 23:34:51
【问题描述】:

我有一个数据表,我想对其应用一个函数,即来自priceRhistorical_exchange rates 函数。我已经想出了如何在我的数据表中应用这个函数,但是这个函数会吐出两个变量。我只想从函数中获取具体的汇率。因此,在Par_value_EUR 列中,我得到了发行日期的汇率。对于第一行,这将是 0.108031

我的数据表如下:

         ISIN    TR.FiCurrency TR.FiIssueDate Par_value_EUR
1: XS1231261907           SEK     2015-05-12            NA
2: XS1231286995           EUR     2015-05-12            NA
3: XS1231416287           HKD     2015-05-19            NA
4: XS1232143310           EUR     2015-05-13            NA
5: XS1232309226           HKD     2015-05-20            NA
6: XS1232498011           USD     2015-05-27            NA

structure(list(ISIN = c("XS1231261907", "XS1231286995", "XS1231416287", 
"XS1232143310", "XS1232309226", "XS1232498011"), TR.FiCurrency = c("SEK", 
"EUR", "HKD", "EUR", "HKD", "USD"), TR.FiIssueDate = structure(c(16567, 
16567, 16574, 16568, 16575, 16582), class = "Date"), Par_value_EUR = c(NA, 
NA, NA, NA, NA, NA)), row.names = c(NA, -6L), class = c("data.table", 
"data.frame"), .internal.selfref = <pointer: 0x7fc85800cee0>)

我正在使用 apply 将这个函数应用于我的数据表中的行:

par_values_test$Par_value_EUR <- apply(par_values_test[,c('TR.FiCurrency','TR.FiIssueDate')], 1, 
                                       function(y) historical_exchange_rates(y['TR.FiCurrency'], "EUR", y['TR.FiIssueDate'],y['TR.FiIssueDate'] ) )

结果如下:

           ISIN TR.FiCurrency TR.FiIssueDate     Par_value_EUR
1: XS1231261907           SEK     2015-05-12 <data.frame[1x2]>
2: XS1231286995           EUR     2015-05-12 <data.frame[1x2]>
3: XS1231416287           HKD     2015-05-19 <data.frame[1x2]>
4: XS1232143310           EUR     2015-05-13 <data.frame[1x2]>
5: XS1232309226           HKD     2015-05-20 <data.frame[1x2]>
6: XS1232498011           USD     2015-05-27 <data.frame[1x2]>

如您所见,这会在 Par_value_EUR 列中放置一个新数据框,而我只想要该数据框中的第二个元素。

【问题讨论】:

    标签: r apply


    【解决方案1】:

    我们可以使用[[ 提取列。另外,最好使用lapply/Map而不是apply,因为apply转换为matrix,矩阵只能有一个类型

    par_values_test[, Par_value_EUR := unlist(Map(\(x, y) historical_exchange_rates(x, "EUR", y, y)[[2]], TR.FiCurrency, TR.FiIssueDate))]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 2013-02-25
      • 2017-03-06
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多