【问题标题】:Error in charToDate(x) : character string is not in a standard unambiguous formatcharToDate(x) 中的错误:字符串不是标准的明确格式
【发布时间】:2015-01-27 05:48:42
【问题描述】:

我写作是因为我无处可去寻找答案。我正在尝试缩小我现有的表格。它的形式如下:

Živilec;     Proizvodnja;            Kariera d.o.o.;  18.11.2014 hh.mm.ss;  Ljubljana
Živilec;     Prehrambena industrija; Kariera d.o.o.;  18.11.2014 hh.mm.ss;  Ljubljana
Vodja;       Strojništvo;            Adecco;          18.11.2014 hh.mm.ss;  Maribor
Vodja;       Tehnične storitve;      Adecco;          18.11.2014 hh.mm.ss;  Maribor
Vodja;       Elektrotehnika;         Adecco;          18.11.2014 hh.mm.ss;  Celje

,日期实际上插入为 18.11.2014 8:35:59 但我不需要时间,只需要日期。 而我想要达到的是:

Živilec;  Proizvodnja,Preh. industrija; Kariera d.o.o.; 18.11.2014;          Ljubljana
Vodja;    Stroj.,Teh. stor., Elektro.;  Adecco;         18.11.2014;          Maribor, Celje

我已经尝试在这个 R 代码的帮助下得到这个:

matrik<-matrix(0,600,30)
for (i in 1:dim(a)[1]){
  if (is.element(a[i,3],matrik[,15])==TRUE & is.element(a[i,1],matrik[,1])==TRUE){
    katero<-which(a[i,1]==matrik[,1])
    kdo<-which(a[i,15]==matrik[,15])
    kje<-min(intersect(kdo,katero))
    if (kje!=0){
      prosto<-min(which(matrik[kje,2:14]==0))
      matrik[kje,prosto]<-as.character(a[i,2])
      prosti<-min(which(matrik[kje,17:30]==0))
      matrik[kje,prosti]<-as.character(a[i,5])
    }
    if (kje==0){
      povrsti<-min(which(matrik[,1]==0))
      matrik[povrsti,1]<-as.character(a[i,1])
      prosto<-min(which(matrik[povrsti,2:14]==0))+1
      matrik[povrsti,prosto]<-as.character(a[i,2])
      matrik[povrsti,15]<-as.character(a[i,3])
      matrik[povrsti,16]<-as.character(a[i,4])
      prosti<-min(which(matrik[povrsti,17:30]==0))+1
      matrik[povrsti,prosti]<-as.character(a[i,5])      
    }
  }
  else {
    povrsti<-min(which(matrik[,1]==0))
    matrik[povrsti,1]<-as.character(a[i,1])
    prosto<-min(which(matrik[povrsti,2:14]==0))+1
    matrik[povrsti,prosto]<-as.character(a[i,2])
    matrik[povrsti,15]<-as.character(a[i,3])
    matrik[povrsti,16]<-as.character(a[i,4])
    prosti<-min(which(matrik[povrsti,17:30]==0))+16
    matrik[povrsti,prosti]<-as.character(a[i,5])  
  }

}

基本上我会创建一个新矩阵来存储值,因为我无法存储像 teh 这样的类别。 storitve、strojništvo、elektro 在一个单元格中,而在同一列的另一个单元格中只有 2 个值 我决定查看所有类别的最大值并制作那么多单元格。如果这个问题可以解决,如果可以的话,请告诉我。所以无论如何在制作一个零矩阵之后,我检查第一个元素(所以“Živilec”)和第三个元素(所以“Kariera doo”)是否相同,如果这是真的,我只想将值添加到第二个和第五个(最后)列。如果没有,我发现我必须在现有矩阵中添加一个新行,其中包含表中的所有值。当我运行此代码时,我收到错误:

Error in charToDate(x) : 
  character string is not in a standard unambiguous format

怎么办?有什么解决办法吗?

感谢您的宝贵时间。

【问题讨论】:

  • 您的预期结果是一种非常糟糕的数据分析格式,并且您的代码太复杂且难以阅读,因为您的空格键似乎不起作用。无论如何,我找不到您在代码中转换日期时间的位置,但您应该使用类似 as.Date(as.POSIXct(&lt;your datetimes&gt;, format = "%d.%m.%Y %H:%M:%S", tz = &lt;yourtimezone&gt;)) 的东西。

标签: r rstudio


【解决方案1】:

为了解析日期,你可以这样做:

library(lubridate)

x <- c("18.11.2014 8:35:59")
as.Date(dmy_hms(x))

否则,你应该给社区一些样本数据......使用

dput(your_data)

人们会立即为您指路。

更新

这里有一个解决方案:

加载一些有用的库...

library(stringr)
library(dplyr)

你的数据...

toy_data <-
structure(list(V1 = structure(c(2L, 2L, 1L, 1L, 1L), .Label = c("Vodja", 
"Živilec"), class = "factor"), V2 = structure(c(5L, 4L, 2L, 3L, 
1L), .Label = c("       Elektrotehnika", "       Strojništvo", 
"       Tehnične storitve", "     Prehrambena industrija", "     Proizvodnja"
), class = "factor"), V3 = structure(c(2L, 5L, 1L, 4L, 3L), .Label = c("            Adecco", 
"            Kariera d.o.o.", "         Adecco", "      Adecco", 
" Kariera d.o.o."), class = "factor"), V4 = structure(c(2L, 2L, 
1L, 1L, 1L), .Label = c("          18.11.2014", "  18.11.2014"
), class = "factor"), V5 = structure(c(2L, 2L, 3L, 3L, 1L), .Label = c("  Celje", 
"  Ljubljana", "  Maribor"), class = "factor")), .Names = c("V1", 
"V2", "V3", "V4", "V5"), class = "data.frame", row.names = c(NA, 
-5L))

一个有用的功能...

my_str_c <- function(x){str_c(unique(x), collapse = ";")}

您想要的输出的代码...

toy_data %>%
  mutate_each(funs(str_trim)) %>%
  group_by(V1) %>%
  summarise_each(funs(my_str_c))

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 2020-03-03
    • 2013-08-29
    • 1970-01-01
    • 2021-01-20
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多