当 data.frame 中有多个变量需要融化时,我很困惑如何让它发挥作用。这是一个例子:
Data <- data.frame(SampleID = rep(1:10, each = 3),
TimePoint = rep(LETTERS[1:3], 10))
Data$File.ESIpos <- paste("20141031 Subject", Data$SampleID, "Point",
Data$TimePoint, "ESIpos")
Data$Date.ESIpos <- "20141031"
Data$File.ESIneg <- paste("20141030 Subject", Data$SampleID, "Point",
Data$TimePoint, "ESIneg")
Data$Date.ESIneg <- "20141030"
Data$File.APCIpos <- paste("20141029 Subject", Data$SampleID, "Point",
Data$TimePoint, "APCIpos")
Data$Date.APCIpos <- "20141029"
我希望它被日期和文件融化,以便新的 data.frame 具有列“SampleID”、“TimePoint”和一个新列“Mode”(其中的选择是 ESIpos、ESIneg 和 APCIpos) 、"file"和“日期”。这是我使用 reshape() 函数获得的最接近的结果。
Data.long <- reshape(Data,
varying = c("File.ESIpos", "Date.ESIpos",
"File.ESIneg", "Date.ESIneg",
"File.APCIpos", "Date.APCIpos"),
idvar = c("SampleID", "TimePoint"),
ids = c("ESIpos", "ESIneg", "APCIpos"),
v.names = c("Date", "File"),
sep = ".",
direction = "long")
输出是一个数据帧,包含“SampleID”、“TimePoint”、“time”列(“ESIpos”、“ESIneg”或““”为“1”、“2”或“3” APCIpos”)、“日期”和"file"。
第一个问题是我看不到如何定义新的“模式”列。当然,我可以将“time”列更改为“Mode”,但是没有办法告诉它级别应该是“ESIpos”、“ESIneg”和“APCIpos”而不是 1、2 , 3?我以为我是用 ids = c("ESIpos"...
做的,但显然我不是。另外,无论我是否包含 ids = c("ESIpos"...
行。
第二个较小的问题是,无论我说的是 v.names = c("Date", "File")
还是 v.names = c("File", "Date")
,列总是交换,即我在 Date 列中获取文件名,反之亦然。
最佳答案
我认为这就是您要执行的 reshape()
命令
reshaped <- reshape(Data, direction = "long", varying = 3:8,
times = c("ESIpos", "ESIneg", "ACPIpos"))
head(reshaped)
# SampleID TimePoint time File Date id
# 1.ESIpos 1 A ESIpos 20141031 Subject 1 Point A ESIpos 20141031 1
# 2.ESIpos 1 B ESIpos 20141031 Subject 1 Point B ESIpos 20141031 2
# 3.ESIpos 1 C ESIpos 20141031 Subject 1 Point C ESIpos 20141031 3
# 4.ESIpos 2 A ESIpos 20141031 Subject 2 Point A ESIpos 20141031 4
# 5.ESIpos 2 B ESIpos 20141031 Subject 2 Point B ESIpos 20141031 5
# 6.ESIpos 2 C ESIpos 20141031 Subject 2 Point C ESIpos 20141031 6
关于R:统计包中的 reshape() 函数有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26692582/