【问题标题】:How to apply a SPSS date transformation formula to multiple variables?如何将 SPSS 日期转换公式应用于多个变量?
【发布时间】:2019-12-20 15:09:19
【问题描述】:

我对 R 比较陌生,正在尝试了解如何转换包含从 SPSS 导入的大型数据框中的日期的特定列。 604 个变量中有 241 个是日期,R 显示为从 1582-10-14 开始的秒数。我使用 as.Date 函数成功地转换了一个这样的列

dataframe$column.date <- as.Date(dataframe$column.date / 86400, origin = "1582-10-14")

我将如何将此函数应用于我的数据框中的这些特定的 241 / 604 列,而无需编写额外的 240 行代码?

【问题讨论】:

  • 嗨,欢迎来到 SO,日期列是否有一些独特的逻辑,例如列名称上的“日期”,或者只有它们超过 >1000 或所有日期在 (12000,13000 ) 或类似的东西?
  • 嗨!感谢您的快速反应。不幸的是,包含日期的列的名称对它们没有逻辑。但是,日期是我的数据框中唯一的高值。没有其他值超过 100。
  • @Superschmiecht 你能贴一张数据框的截图吗
  • 我添加了包含日期的 2 个列的屏幕截图

标签: r date transform spss


【解决方案1】:

假设这是您拥有的 data.frame 的示例。

record_createdon<-c(13794833494,13794833494,13794837926)
inclusion<-c('Yes,','Yes','Yes')
ibd_dat<-c(12866169600,13556937600,13552272000)

df<-data.frame(record_createdon,inclusion,ibd_dat)

根据您所做的 - 创建一个包含日期的列名称的向量。让我们称之为date_vec

date_vec&lt;-c('record_createdon','ibd_dat')

您可以使用 base R 中的 lapply 函数来转换带有日期的列,而无需使用以下方法为每个带有数据的列编写转换

df[date_vec]<-lapply(df[date_vec],function(x) as.Date(x/86400, origin = "1582-10-14"))

  record_createdon inclusion    ibd_dat
1       2019-12-04      Yes, 1990-07-01
2       2019-12-04       Yes 2012-05-21
3       2019-12-04       Yes 2012-03-28

【讨论】:

  • 感谢您的回答!但是,它也将该函数应用于所有其他变量。有没有办法指定命令应该应用于哪些变量?
  • 非日期值是否按特定顺序排列?例如每隔一列
  • 不幸的是他们不是。但是,我确实制作了一个向量,其中包含所有包含 dat 值的列的名称。有没有办法让 R 只将上面的函数应用于那些列?感谢您的帮助!
  • @Superschmiecht 根据新信息更新了答案
【解决方案2】:

好的,我们可以使用 tidyverse 解决这个问题

library(tidyverse)


logic <- function(x){
  mean_x = mean(x,na.rm = TRUE)
  mean_x %>% is.na() %>% `!` & mean_x > 100
}

date_conversion <- function(x){
  as.Date(x/86400, origin = "1582-10-14")
}

new_df <- df %>% 
  mutate_if(logic,.funs = date_conversion)

【讨论】:

  • 这工作并使用给定的函数改变所有高于 100 的值。但是,这仅在我运行这些命令时才有效。当我之后打印数据框时,它仍然将日期作为高数字而不是 YYYY-MM-DD 格式。有没有办法保存数据框中的更改?
  • @Superschmiecht 研究 R 中的分配
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-10
相关资源
最近更新 更多