【问题标题】:Changing column data types using Mutate_at() in R在 R 中使用 Mutate_at() 更改列数据类型
【发布时间】:2020-07-12 20:41:34
【问题描述】:

尝试在 中使用mutate_at() 更改多个CHR 类型列。

更新:

这是小标题。请注意,我可以在单个变量上使用带有 mdy_hm() 的常规 mutate,但不能在 mutate_at() 中使用多个

head(data)
# A tibble: 6 x 52
  CONTACTID Status `Contract Date` `Country of Ori~ `CES Submitted` `Embassy Date` `Hire Date` Agent `ATT Received` `CES Issued Dat~ `CES Ready Revi~ `CES RFR 8 week~ `I-140 Sent` `I-140 Recd.` `I-140 Result D~ `I-140 Status` `CES Status` `Choice of Agen~ Client `Contact Owner`
  <chr>     <chr>  <chr>           <chr>            <chr>           <chr>          <chr>       <chr> <chr>          <chr>            <chr>            <lgl>            <chr>        <chr>         <chr>            <chr>          <chr>        <chr>            <chr>  <chr>          
1 zcrm_257~ Finis~ NA              Philippines      NA              NA             6/22/2015   NA    NA             NA               NA               FALSE            NA           NA            NA               NA             NA           NA               Oakbe~ Tyler Richards 
2 zcrm_257~ Finis~ 12/15/2015 0:00 England          NA              12/5/2016      2/20/2017   Adev~ NA             NA               NA               FALSE            4/14/2016    6/29/2011     4/25/2016        Approved       NA           5/25/2016        Oakbe~ Eddie Money    
3 zcrm_257~ Finis~ 11/9/2015 6:00  Philippines      NA              NA             11/17/2015  Ulti~ NA             NA               NA               FALSE            NA           NA            NA               NA             NA           NA               Oakbe~ Eddie Money    
4 zcrm_257~ Finis~ 3/3/2016 21:00  Philippines      NA              NA             3/21/2016   NA    NA             NA               NA               FALSE            NA           NA            NA               NA             NA           NA               Oakbe~ Eddie Money    
5 zcrm_257~ Finis~ 8/15/2006 0:00  Philippines      NA              3/21/2016      6/27/2016   IQ    NA             NA               NA               FALSE            3/1/2007     3/2/2007      3/8/2007         Approved       NA           7/10/2007        Oakbe~ alyssa Coleman 
6 zcrm_257~ Relea~ 7/20/2016 6:00  Philippines      NA              NA             9/12/2016   Ulti~ NA             NA               NA               FALSE            NA           NA            NA               NA             NA           NA               Oakbe~ Eddie Money    
# ... with 32 more variables: `DS260 Completed` <chr>, Elite <lgl>, `Embassy Status` <chr>, `Fee Bill Received` <chr>, `Fee Bill Returned` <chr>, `Hospital Country` <chr>, `Hospital Size` <dbl>, `IELTS Test Date` <chr>, `Initial Ready for Review` <chr>, `Instruction Pkt.
#   Returned` <chr>, `Lead Source` <chr>, `Name of Hospital` <chr>, `NCLEX Pass/Fail` <chr>, `NCLEX Ready 90 days` <lgl>, `NCLEX Review Purchased` <chr>, `NCLEX Review Name` <chr>, `NCLEX Test Date` <chr>, `NVC Completed` <chr>, `Mailing City` <chr>, `Mailing Country` <chr>,
#   `Mailing State` <chr>, `Previous Rcpt Date` <lgl>, `RFE Issue Date` <chr>, Specialty <chr>, `State Board Approved Date` <chr>, `Submittal Date` <chr>, `UTM Source` <chr>, `UTM Medium` <chr>, `UTM Content` <chr>, `Visa Screen Approved` <chr>, `Years as RN` <dbl>,
#   `Termination Date` <chr>

这里仅以两个为例:

data <- data %>% mutate_at(data,vars(`Contract Date`,`Hire Date`),
                             funs(as_date(mdy_hm())))

这会产生以下错误:

错误:`.vars` 必须是字符/数字向量或 `vars()` 对象,而不是 `tbl_df/tbl/data.frame` 对象 运行 `rlang::last_error()` 以查看错误发生的位置。

关于如何避免此错误的任何帮助?

【问题讨论】:

  • 使用pipe意味着您无需在mutate调用或其他调用中再次添加data2

标签: tidyverse r dplyr


【解决方案1】:

Contract DateHire Date 有不同的格式。试试看:

library(dplyr)
library(lubridate)

data2 %>% 
  mutate(`Contract Date` = as_date(mdy_hm(`Contract Date`)), 
         `Hire Date` = mdy(`Hire Date`))

我们也可以使用base R来做到这一点:

transform(df, `Contract Date` = as.Date(as.POSIXct(`Contract Date`, 
                                format = "%m/%d/%Y %H:%M")), 
              `Hire Date` = as.Date(`Hire Date`, "%m/%d/%Y"))

【讨论】:

  • Ronak -- 谢谢你的回答;知道为什么会这样: > data2 %>% mutate_at(vars(Contract Date,Hire Date),~as_date(mdy_hm())) > Error: Column Contract Date must be length 2476 (the行数)或一,而不是 0 Tibble 中有 2476 行,合同日期具有该长度,是否已替换其他字段并得到相同的错误?
  • @TylerR 我想你错过了mdy_hm() 中的一个点。使用data2 %&gt;% mutate_at(vars(`Contract Date`,`Hire Date`),~as_date(mdy_hm(.)))
  • 谢谢@ronak!啊 - 产生了“2:所有格式都无法解析。没有找到格式。”
  • 表示您没有与mdy_hm兼容的数据。您可以使用dput(head(data2)) 更新您的帖子并分享您的部分数据吗?
  • @TylerR 两列都有不同格式的数据,您需要对它们使用不同的功能。检查更新的答案。
猜你喜欢
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
  • 2019-10-25
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
  • 2019-11-08
相关资源
最近更新 更多