【问题标题】:Remove line breaks "\n" in R删除 R 中的换行符“\n”
【发布时间】:2015-04-24 10:44:29
【问题描述】:

我一直在尝试从 R 中的数据集中删除换行符。所有列都是因子,因此在我可以用“NA”替换“\n”之前,我需要将数据类型从因子更改为字符或日期。为了更好地理解,我提到了我的代码和示例数据集:

     sku          Stockout_start        Stockout_End      create_date
  0BX-164463    \N                 1/29/2015 11:35  1/29/2015 11:35
  0BX-164463    2/11/2015 18:01               \N    2/11/2015 18:01
  0BX-164464    \N                 1/29/2015 11:38  1/29/2015 11:38
  0BX-164464    1/30/2015 4:38                  \N  1/30/2015 4:38
  0BX-164481    \N                 1/28/2015 9:58   1/28/2015 9:58
  0BX-164482    \N                1/29/2015 11:37   1/29/2015 11:37
  0BX-164482    2/4/2015 7:17                 \N    2/4/2015 7:17
  0BX-164483    \N                1/29/2015 11:37   1/29/2015 11:37
  0BX-164483    2/7/2015 4:37                 \N    2/7/2015 4:37
  0BX-164496    \N                1/29/2015 9:45    1/29/2015 9:45
  0BX-164497    \N                1/28/2015 10:02   1/28/2015 10:02
  0BX-164498    \N                1/29/2015 9:45    1/29/2015 9:45
  0BX-164499    \N                1/29/2015 11:36   1/29/2015 11:36
  0BX-164500    \N                1/29/2015 11:36   1/29/2015 11:36
  0BX-164501    \N                1/29/2015 11:36   1/29/2015 11:36

我一直在使用下面提到的代码来更正数据:

stk[,2]<- as.Date(as.character(stk[,2]),format = "%y-%m-%d %H:%M:%S")
stk[,2]<- as.character(as.Date(stk[,2], origin = "1970-01-01"))

但是这些代码将我的第 2 列更改为“NA”。 请帮忙。

【问题讨论】:

  • 我猜你可以在read.csv/read.table中指定na.strings
  • 这不起作用。我试过了。都是因素,在更改数据类型时,它会将整个第二列更改为 NA
  • 你能显示你用来读取数据的代码吗?如果需要字符列,指定stringsAsFactors=FALSE
  • 我一直在使用这个代码stk
  • 如果您指定了stringsAsFactors=FALSE,则列将是字符。请查看str(stk)

标签: r date line-breaks type-conversion factors


【解决方案1】:

更简单的代码是strptime

stk[,2]<-strptime(stk[,2], "%d/%m/%Y %H:%M")

【讨论】:

  • 我不明白这有多简单。根据 OP 的数据,格式也不正确。此外,还有多个日期列。
【解决方案2】:

您可以在read.csv/read.table 中指定na.stringsstringsAsFactors=FALSE。 (我把分隔符改成了,,保存了输入数据)

 stk <- read.csv('Akash.csv', header=TRUE, stringsAsFactors=FALSE,
       sep=",", na.strings="\\N")
 head(stk,3)
 #         sku  Stockout_start    Stockout_End     create_date
 #1   0BX-164463            <NA> 1/29/2015 11:35 1/29/2015 11:35
 #2   0BX-164463 2/11/2015 18:01            <NA> 2/11/2015 18:01
 #3   0BX-164464            <NA> 1/29/2015 11:38 1/29/2015 11:38

如果您需要将多个列替换为“日期”类

 stk[-1] <- lapply(stk[-1], as.Date, format='%m/%d/%Y %H:%M') 
 str(stk)
 #'data.frame': 15 obs. of  4 variables:
 #$ sku           : chr  "  0BX-164463" "  0BX-164463" "  0BX-164464" "  0BX-164464" ...
 #$ Stockout_start: Date, format: NA "2015-02-11" ...
 #$ Stockout_End  : Date, format: "2015-01-29" NA ...
 #$ create_date   : Date, format: "2015-01-29" "2015-02-11" ...

【讨论】:

    【解决方案3】:

    你确实应该在调用as.Date之前清理数据

    你能先确定你的data.frame有stringAsFactors=FALSE,然后试试

    stk[stk$Stockout_start=="\N","Stockout_start"]=NA
    

    然后是你的代码

    stk[,2]<- as.Date(as.character(stk[,2]),format = "%y-%m-%d %H:%M:%S")
    stk[,2]<- as.character(as.Date(stk[,2], origin = "1970-01-01"))
    

    【讨论】:

    • 无法识别“\N”:错误:“\N”是开头“\N”的字符串中无法识别的转义
    • 那么请在发布问题之前阅读stackoverflow.com/questions/5963269/…,并提供示例数据集。否则,您将不断得到与您的数据不相符的答案。
    猜你喜欢
    • 2020-09-25
    • 2012-08-12
    • 2020-01-30
    • 2014-05-22
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    相关资源
    最近更新 更多