R:统计包中的 reshape() 函数有问题

标签 r reshape

当 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/

相关文章:

r - 为矩阵的对角项赋值

r - 转换数据框,以便列出的每个唯一事务成为单行

r - 如何将多行 reshape 为具有多列的单行

matrix - 如何将立方体 reshape 为矩阵 Armadillo

python - AttributeError: 'Series' 对象没有属性 'reshape'

r - 如何更改特定 Shiny 小部件的样式

R中多列的每行排名

r - 使用 'bife' 包的固定效应 logit 模型的拟合优度

R重命名函数中传递的列

mysql - reshape 表,使日期在 MySQL 的列中是连续的