【问题标题】:Covert List into non-indexed Vector in R将列表转换为R中的非索引向量
【发布时间】:2015-11-16 23:35:39
【问题描述】:

我有一个如下形式的列表

[[1]]
[1] "2014-09-26"

[[2]]
[1] "2013-09-27"

[[3]]
[1] "2012-09-28"

[[4]]
character(0)

但是我需要下面代码的形式

end_dates <- c("2014-09-26", "2013-09-27", "2012-09-28", "")

我不能只输入这些值,因为它们是从另一组数据中计算出来的,然后在后续代码中使用,当我使用 List 时它会失败,而当我使用 Vector 时它会工作。

【问题讨论】:

  • @akrun's 是正确的方法。这是备用gsub("character(0)", "", as.vector(my_list, mode="character"), fixed=TRUE)
  • @hrbrmstr 我想你的意思是as.Date(as.vector(lst, mode="numeric"), origin = "1970-01-01"),不是吗?
  • 我不确定 OP 是否需要实际日期或字符串。不清楚。
  • @hrbrmstr 我正在使用 akruns 数据(Date 类)测试您的建议,但如果数据只是字符,那么您的建议将有效。

标签: r list vector type-conversion


【解决方案1】:

最好将缺失值设为NA 而不是''

使用if/else 条件,我们将list 元素替换为等于0 的lengthNA,然后使用do.call('c',..

  end_dates <- do.call('c', lapply(lst, function(x) if(length(x)==0) NA else x))
  end_dates
  #[1] "2014-09-26" "2013-09-27" "2012-09-28" NA          
  str(end_dates)
  #Date[1:4], format: "2014-09-26" "2013-09-27" "2012-09-28" NA

数据

 lst <- list(structure(16339, class = "Date"), structure(15975, class = "Date"), 
structure(15611, class = "Date"), structure(numeric(0), class = "Date"))

【讨论】:

  • do.call里面的c需要引号'c'
  • @Sölvi 如果您已经将c 定义为全局空间中的对象名称,则需要引用。否则,它会在没有它的情况下工作。但是,我编辑了它以防有人意外拥有一个对象c
  • 你说得对,我的环境中已经有另一个名为 c 的对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多