如何解决如果col名称迄今包含“ dat”,则进行突变
我有以下df,其中num,chr,num
dat a idat
1 20200101 h 20200101
2 20200113 g 20200113
3 20200213 b 20200213
我想获取日期,时间,日期
dat a idat
1 2020-01-01 h 2020-01-01
2 2020-01-13 g 2020-01-13
3 2020-02-13 b 2020-02-13
我尝试了很多事情,包括:
df %>%
mutate_if(vars(contains("dat")),function(x)
{as.Date(as.character(x),"%Y%m%d")})
有人有建议吗?在此先感谢:)
解决方法
我们需要mutate_if
而不是mutate_at
。在dplyr
的较新版本中,可以使用mutate
和across
library(dplyr) # >= 1.0.0
df1 <- df %>%
mutate(across(contains('dat'),~ as.Date(as.character(.),format = '%Y%m%d')))
在1.0.0
之前,可以使用mutate_at
df1 <- df %>%
mutate_at(vars(contains('dat')),~as.Date(as.character(.),format = '%Y%m%d'))
mutate_if
通常用于根据列的值检查某些条件,即
df %>%
mutate_if(is.numeric,format = '%Y%m%d'))
作为可重复的示例
head(iris) %>%
mutate_if(is.numeric,~ .x * 5)
,
一种data.table
方法,其使用与akun的tidyverse
答案相同的逻辑
library( data.table )
DT <- fread("dat a idat
20200101 h 20200101
20200113 g 20200113
20200213 b 20200213")
cols <- grep( "dat",names(DT),value = TRUE )
DT[,(cols) := lapply( .SD,function(x) as.Date( as.character(x),format = "%Y%m%d" ) ),.SDcols = cols ][]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。