charToDate(x)中的错误:字符串不是标准的明确格式

时间:2014-11-28 14:31:23

标签: r rstudio

我正在写作,因为我无处可去获得答案。我试图缩小我现有的表格。它是下一种形式:

Ž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

怎么办?任何解决方案?

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

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

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))