如何将 SPSS 日期转换公式应用于多个变量?
How to apply a SPSS date transformation formula to multiple variables?
我对 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 行额外的代码?
好的,我们可以使用 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)
假设这是您拥有的 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<-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
我对 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 行额外的代码?
好的,我们可以使用 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)
假设这是您拥有的 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<-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