【问题标题】:Assign values depending on two conditions (non-trivial)根据两个条件分配值(非平凡)
【发布时间】:2017-06-09 09:55:41
【问题描述】:

我有一个非常简单的方法,它通过以下方式为我的列表分配值: 1.它进入带有文件的文件夹 2.用我设置的银行号码检查文件是否存在 3. 如果它在那里,它会从它那里获取特定日期的数据,这也是我在这个方法中设置的 方法如下:

balancesheet.list <- getBalanceSheet_list("2016-04-01",1481)

因此,在这个特定示例中,它转到文件夹,获取编号为 1481 的文件,并将日期为 2016-04-01 的数据从此文件分配到我的列表中。

我需要为我需要的每个日期分配此文件夹中所有文件的数据。有关每个特定日期和银行编号的数据应记录在单独的子列表或单独的列表中。 更详细地说,我需要为每个银行号码分配从 2007-04-01 到 2017-01-01 的月份数据。 我创建了两个 csv 文件:一个包含我需要的日期范围:

2007-02-01
2007-03-01
2007-04-01
2007-05-01
2007-06-01
...
2016-11-01
2016-12-01
2017-01-01

第二个是我一般拥有的银行号码:

1
2
21
52
53
55
...
3525
3527
3528
3529
3533

我的想法是在 R 中导入这些文件并将它们替换为“2016-04-01”和 1481。但在我看来,这是个糟糕的主意。

我还决定尝试以下代码,不导入任何文件:

balancesheet.list<- getBalanceSheet_list(seq(as.Date("2007-04-01"), as.Date("2017-01-01"), by="months"),1481) 

R 给出错误: 参数“模式”的长度>1,只使用第一个元素

据我了解,问题在于它试图在 1 个列表中分配多个月的数据。是否可以说是按列表或子列表为每个单独的日期记录数据?

如何将两种想法中的任何一种现代化?请帮忙。

【问题讨论】:

    标签: r database date methods variable-assignment


    【解决方案1】:

    你可以试试

    lapply(seq(as.Date("2007-04-01"), as.Date("2017-01-01"),by="months"),getBalanceSheet_list,1481)
    

    这应该会为您提供文件 1481 中所有日期的数据。我说“sholud”是因为很难确定,当您不提供有关 getBalanceSheet_list 函数的任何详细信息时;)

    不,我们可以做一个函数

    one_file <- function(file) lapply(seq(as.Date("2007-04-01"), as.Date("2017-01-01"),by="months"),getBalanceSheet_list, file)
    

    并对所有文件执行它。但首先我们需要一个带有他们名字的向量,比如:

    files<-c(1, 2, 21, ...)
    

    显然,您必须将... 更改为数字。我不能这样做,因为(再次)你没有提供它们:)

    现在

    lapply(files, one_file)
    

    应该给你所有你需要的信息。

    您也可以将所有lapply 替换为sapply。如果只有 getBalanceSheet_list 返回一些漂亮的对象(如向量或单个值),这将使结果看起来更漂亮。

    【讨论】:

      猜你喜欢
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 2018-05-28
      • 1970-01-01
      • 2020-04-09
      • 1970-01-01
      相关资源
      最近更新 更多