R与自己合并

时间:2012-12-05 18:02:21

标签: r data-manipulation

我可以合并

这样的数据吗?
name,#797,"Stachy, Poland"
at_rank,#797,1
to_center,#797,4.70
predicted,#797,4.70

根据第二列并将第一列作为列名?

     name             at_rank to_center predicted
#797 "Stachy, Poland" 1       4.70      4.70

根据要求,整套数据:http://sprunge.us/cYSJ

3 个答案:

答案 0 :(得分:2)

如果引用带逗号的字符串(它们似乎是),那么读取数据的第一个问题应该不是问题。将read.csvheader=FALSE参数一起使用会对您共享的数据起作用。 (当然,如果数据文件有标题,请删除该参数。)

从那里,你有几个选择。这是两个。

  1. reshape(基数R)适用于此:

    myDF <- read.csv("http://sprunge.us/cYSJ", header=FALSE)
    myDF2 <- reshape(myDF, direction="wide", idvar="V2", timevar="V1")
    head(myDF2)
    #    V2                V3.name V3.at_rank V3.to_center V3.predicted
    # 1  #1                Kitoman          1         2.41         2.41
    # 5  #2                Hosaena          2         4.23         9.25
    # 9  #3 Vinzelles, Puy-de-Dôme          1         5.20         5.20
    # 13 #4     Whitelee Wind Farm          6         3.29         8.07
    # 17 #5    Steveville, Alberta          1         9.59         9.59
    # 21 #6        Rocher, Ardèche          1         0.13         0.13
    
  2. 在这些情况下,reshape2包也很有用。它具有更简单的语法,输出也有点“干净”(至少在变量名称方面)。

    library(reshape2)
    myDFw_2 <- dcast(myDF, V2 ~ V1)
    # Using V3 as value column: use value.var to override.
    head(myDFw_2)
    #       V2 at_rank                                       name predicted to_center
    # 1     #1       1                                    Kitoman      2.41      2.41
    # 2    #10       4                            Icaraí de Minas      6.07      8.19
    # 3   #100       2        Scranton High School (Pennsylvania)      5.78      7.63
    # 4  #1000       1                  Bat & Ball Inn, Clanfield      2.17      2.17
    # 5 #10000       3                                     Tăuteu      1.87      5.87
    # 6 #10001       1 Oak Grove, Northumberland County, Virginia      5.84      5.84
    

答案 1 :(得分:1)

查看Hadley的reshape包。如果我理解正确,您只是将数据从长到大转动。

答案 2 :(得分:0)

我认为在这种情况下你真正需要做的就是转置,转换为data.frame,将colnames设置为第一行然后删除第一行。有可能跳过data.frame的一些参数组合的最后一步,但我不知道它们现在是什么。