【问题标题】:Rearranging Data frame in R在R中重新排列数据框
【发布时间】:2013-07-03 02:29:49
【问题描述】:

所以我有一个看起来像这样的 R 输出

Time    50  100  150  200  250  300  350
Carla  1.2  1.8  2.2  2.3  3.0  2.5  1.8
Mace   1.5  1.1  1.9  2.0  3.6  3.0  2.5
Lea    1.7  1.6  2.3  2.7  2.6  2.2  2.6
Karen  1.3  1.7  1.9  2.2  3.2  1.5  1.9

我希望它看起来像这样

Time  Score   Name
50    1.2     Carla
50    1.5     Mace
50    1.7     Lea
50    1.3     Karen
100   1.8     Carla
100   1.5     Mace
100   1.7     Lea
100   1.3     Karen

我怎样才能把它变成这个? 谢谢

【问题讨论】:

  • 这是table matrix 还是data.frame?你能dput(objectname)让我知道你在处理什么吗?

标签: r transform


【解决方案1】:

我直接从这里复制您的数据集并对其进行了一些处理:

library(reshape2)

data <- read.fwf("data.txt",widths=c(7,5,7,5,4,4,4,3))
data <- data.frame(lapply(data,function(x){gsub(" ","",x)}),stringsAsFactors=FALSE)
data <- data.frame(lapply(data,as.character),stringsAsFactors=FALSE)
names(data) <- data[1,]
data <- data[-1,]

data <- melt(data,id.vars=c("Time"))
names(data) <- c("Name","Time","Score")
data <- data[,c("Time","Score","Name")]

【讨论】:

    【解决方案2】:

    两种方法,不需要外部包:

    # get the data, the number labelled columns get automatically renamed
    # to say 'X50' instead of '50'
    test <- read.table(text="Time   50   100    150  200 250 300 350
    Carla  1.2   1.8   2.2  2.3 3.0 2.5 1.8
    Mace   1.5   1.1   1.9  2.0 3.6 3.0 2.5
    Lea    1.7   1.6   2.3  2.7 2.6 2.2 2.6
    Karen  1.3   1.7   1.9  2.2 3.2 1.5 1.9",header=TRUE)
    

    方法一:as.data.frame.table

    rownames(test) <- test$Time
    result <- setNames(as.data.frame.table(as.matrix(test[-1])),c("Name","Time","Score"))
    result$Time <- gsub("X","",result$Time)
    
    > head(result)
       Name Time Score
    1 Carla   50   1.2
    2  Mace   50   1.5
    3   Lea   50   1.7
    4 Karen   50   1.3
    5 Carla  100   1.8
    6  Mace  100   1.1
    

    方法2:基R reshape

    result <- reshape(test, idvar="Time", varying=-1, direction="long", sep="")
    names(result) <- c("Name","Time","Score")
    
    > head(result)
               Name Time Score
    Carla.50  Carla   50   1.2
    Mace.50    Mace   50   1.5
    Lea.50      Lea   50   1.7
    Karen.50  Karen   50   1.3
    Carla.100 Carla  100   1.8
    Mace.100   Mace  100   1.1
    

    【讨论】:

      猜你喜欢
      • 2012-10-01
      • 1970-01-01
      • 2014-06-23
      • 2015-09-25
      • 1970-01-01
      • 2018-07-18
      • 2013-10-21
      • 1970-01-01
      相关资源
      最近更新 更多