R 将计算转换为列表中的变量

R 将计算转换为列表中的变量,r,list,conditional,data-manipulation,data-cleaning,R,List,Conditional,Data Manipulation,Data Cleaning,我想在一个大数据集中做一些具体的计算 这是我使用API调用的MWE(下载只需3-4秒) 我下载了你的数据,它很复杂。我已经删除了我的错误答案,以便您可以通过@akrun或类似的人得到答案:)我现在没有时间解析它。我找到了以下解决方案 list_assets<-list(FDI_ASSETS=FDI_ASSETS, Portfolio_ASSETS=Portfolio_ASSETS, other_invest_ASSETS=other_invest_ASSETS, fin_der_ASSET

我想在一个大数据集中做一些具体的计算

这是我使用API调用的MWE(下载只需3-4秒)


我下载了你的数据,它很复杂。我已经删除了我的错误答案,以便您可以通过@akrun或类似的人得到答案:)我现在没有时间解析它。

我找到了以下解决方案

list_assets<-list(FDI_ASSETS=FDI_ASSETS, Portfolio_ASSETS=Portfolio_ASSETS, other_invest_ASSETS=other_invest_ASSETS, fin_der_ASSETS=fin_der_ASSETS, Reserves=Reserves)


for (df in list_assets){
for( i in 1:length(df$"@UNIT_MULT")){
  if (df$"@UNIT_MULT"[i]=="6"){
    df$Obs[[i]]$"@OBS_VALUE" <- as.numeric(df$Obs[[i]]$"@OBS_VALUE")
    df$Obs[[i]]$"@OBS_VALUE" <- df$Obs[[i]]$"@OBS_VALUE"/1000
  }  else if ((df$"@UNIT_MULT"[i]=="3")){
    df$Obs[[i]]$"@OBS_VALUE" <- as.numeric(df$Obs[[i]]$"@OBS_VALUE")
    df$Obs[[i]]$"@OBS_VALUE" <- df$Obs[[i]]$"@OBS_VALUE"/1000000
    }
}
}

list_assetsI无法访问您所说的
OBS_值”。请注意,
OBS_值”是列表中的向量。换句话说,应该相当于:`FDA_资产$Obs$Obs$@Obs_价值'…进行dput(head(FDI_资产,2))和post,以便我们可以看到完整的数据结构。这可能很简单,只要在声明中的所有情况下将FDI_资产$@OBS_值更改为FDI_资产$@OBS_值[[2]],我认为FDI_资产$$OBS[[2]]也不正确,因为在我的例子中,我的元素是一个完整的数据框架,包含三个变量,包括我感兴趣的变量。你能看一下数据结构吗,我已经为你发布了一个更新。我下载了你的数据,它非常复杂。我已经删除了我的错误答案,这样你就可以通过@akrun或类似的人得到答案:)我现在没有时间解析它。不用担心。但我认为我们很接近。我想唯一的困难是正确访问正确的数据。也许现在你可以帮我一点忙@阿卡德豪斯酒店
head(FDI_ASSETS$Obs)
[[1]]
    @TIME_PERIOD        @OBS_VALUE @OBS_STATUS
1        1980-Q1  30.0318922812441        <NA>
2        1980-Q2  23.8926174547104        <NA>
3        1980-Q3   26.599634375058        <NA>
4        1980-Q4  32.7522451203517        <NA>
5        1981-Q1   44.124979234001        <NA>
6        1981-Q2  35.9907120805994        <NA>
str(FDI_ASSETS)
'data.frame':   375 obs. of  6 variables:
 $ @FREQ       : chr  "Q" "Q" "Q" "Q" ...
 $ @REF_AREA   : chr  "FI" "MX" "MX" "TO" ...
 $ @INDICATOR  : chr  "BFDAE_BP6_USD" "BFDAD_BP6_USD" "BFDAE_BP6_USD" "BFDAD_BP6_USD" ...
 $ @UNIT_MULT  : chr  "6" "6" "6" "3" ...
 $ @TIME_FORMAT: chr  "P3M" "P3M" "P3M" "P3M" ...
 $ Obs         :List of 375
  ..$ :'data.frame':    147 obs. of  3 variables:
  .. ..$ @TIME_PERIOD: chr  "1980-Q1" "1980-Q2" "1980-Q3" "1980-Q4" ...
  .. ..$ @OBS_VALUE  : chr  "30.0318922812441" "23.8926174547104" "26.599634375058" "32.7522451203517" ...
  .. ..$ @OBS_STATUS : chr  NA NA NA NA ...
  ..$ :'data.frame':    60 obs. of  2 variables:
  .. ..$ @TIME_PERIOD: chr  "2001-Q1" "2001-Q3" "2002-Q1" "2002-Q2" ...
  .. ..$ @OBS_VALUE  : chr  "9.99999999748979E-05" "9.99999997475243E-05" "9.8999999998739E-05" "-9.90000000342661E-05" ...
  ..$ :'data.frame':    63 obs. of  2 variables:
  .. ..$ @TIME_PERIOD: chr  "2001-Q1" "2001-Q2" "2001-Q3" "2001-Q4" ...
  .. ..$ @OBS_VALUE  : chr  "130.0149" "189.627" "3453.8319" "630.483" ...
  ..$ :'data.frame':    17 obs. of  2 variables:
list_assets<-list(FDI_ASSETS=FDI_ASSETS, Portfolio_ASSETS=Portfolio_ASSETS, other_invest_ASSETS=other_invest_ASSETS, fin_der_ASSETS=fin_der_ASSETS, Reserves=Reserves)


for (df in list_assets){
for( i in 1:length(df$"@UNIT_MULT")){
  if (df$"@UNIT_MULT"[i]=="6"){
    df$Obs[[i]]$"@OBS_VALUE" <- as.numeric(df$Obs[[i]]$"@OBS_VALUE")
    df$Obs[[i]]$"@OBS_VALUE" <- df$Obs[[i]]$"@OBS_VALUE"/1000
  }  else if ((df$"@UNIT_MULT"[i]=="3")){
    df$Obs[[i]]$"@OBS_VALUE" <- as.numeric(df$Obs[[i]]$"@OBS_VALUE")
    df$Obs[[i]]$"@OBS_VALUE" <- df$Obs[[i]]$"@OBS_VALUE"/1000000
    }
}
}