代码之家  ›  专栏  ›  技术社区  ›  Seymour

R-数据。杂乱csv文件的表组索引方法

  •  1
  • Seymour  · 技术社区  · 7 年前

    我正在努力学习数据。然而,我看到它的速度是指数级的。因此,我在这里问你的数据。表的方法来解决我的问题。

    我想通过数据完成的任务。表如下: 假设我有1200万。csv文件的结构与此类似:
    注意:在真实的文件中,每个组都有几百条记录。

    1;  
    0.00;0.01;0.00  
    2;  
    -0.00;0.01;-0.02  
    -0.00;0.01;-0.01  
    0.00;0.00;0.01  
    3;  
    0.00;0.01;0.00  
    0.01;0.01;-0.00   
    4;  
    0.00;0.01;0.00   
    -0.00;0.01;-0.02    
    5;  
    0.00;0.01;0.00  
    0.01;0.01;-0.00  
    

    整数表示ID,而记录是属于该索引的观察值。答案是生成以下内容的解决方案:

    Var_A <- c(0.00, -0.00, -0.00, 0.00,0.01,0.00,0.01,-0.00,0.00,0.01) 
    Var_B <- c(0.01, 0.01, 0.01, 0.01,0.01,0.01,0.01,0.01,0.01,0.01)  
    Var_C <- c(0.00, -0.02, -0.01,0.00,-0.00,0.00,-0.00,-0.02,0.00,-0.00)   
    ID <- c(1, 2, 2, 2, 3, 3,4,4,5,5) 
    solution_df <- data.frame(Var_A, Var_B, Var_C, ID)
    

    希望问题清楚,我向您提供了样本数据,我等待您的帮助:)

    非常感谢。

    1 回复  |  直到 7 年前
        1
  •  1
  •   akrun    7 年前

    我们可以使用 readLines ,然后使用 str_count 基于以下数量创建逻辑向量: ; ,然后通过逻辑向量的累积和创建“ID”。然后用逻辑向量将数据子集,用 read.table cbind 带“ID”

    library(stringr)
    i1 <- str_count(lines, ";")==1
    cbind(ID = cumsum(i1)[!i1], read.table(text=lines[!i1], sep=";"))
    

    数据

    lines <- readLines(textConnection(
    "1;
    0.00;0.01;0.00
    2;
    -0.00;0.01;-0.02
    -0.00;0.01;-0.01
    0.00;0.00;0.01
    3;
    0.00;0.01;0.00
    0.01;0.01;-0.00
    4;
    0.00;0.01;0.00
    0.01;0.01;-0.00
    -0.00;0.01;-0.02
    5;
    0.00;0.01;0.00
    0.01;0.01;-0.00")) 
    
    #Or read from the file
    lines <- readLines('file.csv')