簡體   English   中英

重新排列R中的數據框

[英]Rearranging Data frame in R

所以我的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

我該如何將其轉換為此? 謝謝

兩種方法,既不需要外部包:

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

方法1as.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

我直接從這里復制你的數據集並稍加處理:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM