使用列名称中的时间值重塑R中的数据

查尔斯

我有一个看起来像这样的数据框(简化):

     data1.time1 data1.time2 data2.time1 data2.time2 data3.time1 group
 1          1.53        2.01        6.49        5.22        3.46    A
 ...
 24         2.12        3.14        4.96        4.89        3.81    C

实际上dataK.timeT在1..27中有K,而在1..8中有一些(但可能不是全部)中有T。

我想将数据重新排列为K个数据帧,以便可以为每个K绘制三个组A,B和C的摘要数据(现在让我们说均值和均值±标准差)。是的,我想要27个图形,每个图形有3条线,并且还标出了偏差。

重新排列数据后,应该很容易按组折叠,计算摘要统计信息等。但是我不确定如何将数据转换为这种形式。我查看了该reshape程序包,该程序包建议将其融合为键值存储格式并从那里重新排列,但是它似乎不像我在这里那样支持包含T值的列。

有什么好方法吗?我非常愿意使用R以外的方法来执行此操作,因为我可以在转换后将结果导入R中。

eipi10

在创建具有与您相似的结构的伪造数据之后,我们从宽格式转换为长格式,从而制作了一个“整洁”的数据框,可以使用进行绘制ggplot2

library(reshape2)
library(ggplot2)
library(dplyr)

创建虚假数据

set.seed(194)
dat = data.frame(replicate(27*8, cumsum(rnorm(24*3))))

names(dat) = paste0(rep(paste0("data",1:27), each=8), ".", rep(paste0("time",1:8), 27))

dat$group = rep(LETTERS[1:3], each=24)

删除一些列,以使不同数据源的时间点数量有所不同:

dat = dat[ , -c(2,4,9,43,56,78,100:103,115:116,134:136,202,205)]

从宽幅改写为长幅

datl = melt(dat, id.var="group")

将数据源和时间点分为不同的列:

datl$source = gsub("(.*)\\..*","\\1", datl$variable)
datl$time = as.numeric(gsub(".*time(.*)","\\1", datl$variable))

# Order data frame names by number (rather than alphabetically)
datl$source = factor(datl$source, levels=paste0("data",1:length(unique(datl$source))))

使用ggplot2绘制数据

# Helper function for plotting standard deviation
sdFnc = function(x) {
  vals = c(mean(x) - sd(x), mean(x) + sd(x))
  names(vals) = c("ymin", "ymax")
  vals
}

pd = position_dodge(0.7)

ggplot(datl, aes(time, value, group=group, color=group)) + 
  stat_summary(fun.y=mean, geom="line", position=pd) +
  stat_summary(fun.data=sdFnc, geom="errorbar", width=0.4, position=pd) +
  stat_summary(fun.y=mean, geom="point", position=pd) +
  facet_wrap(~source, ncol=3) +
  theme_bw()

在此处输入图片说明

原始(不必要复杂)重塑代码。(请注意,此代码将不再与更新的(伪)数据集一起使用,因为时间列的数量不再统一):

# Convert data source from wide to long
datl = data.frame()
for (i in seq(1,27*8,8)) {

  tmp.dat = dat[, c(i:(i+7),grep("group",names(dat)))]
  tmp.dat$source = gsub("(.*)\\..*", "\\1", names(tmp.dat)[1])
  names(tmp.dat)[1:8] = 1:8

  #datl = rbind(datl, tmp.dat)
  datl = bind_rows(datl, tmp.dat)  # Updated based on comment
}

datl$source = factor(datl$source, levels=paste0("data",1:27))

# Convert time from wide to long
datl = melt(datl, id.var = c("source","group"), variable.name="time")

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用列名称中的时间值重塑R中的数据

来自分类Dev

使用“登录”“注销”时间在R中重塑数据

来自分类Dev

使用R中的NA值重塑数据框

来自分类Dev

使用R中的几组列名称融合数据

来自分类Dev

如何使用重塑包重塑r中的数据

来自分类Dev

使用熔体在R中重塑数据

来自分类Dev

R中的时间序列-重塑?

来自分类Dev

重塑R中的时间序列

来自分类Dev

R中的时间序列-重塑?

来自分类Dev

在 R 中重塑不同时间长度的数据

来自分类Dev

重塑R中的数据矩阵

来自分类Dev

汇总/重塑R中的数据

来自分类Dev

重塑R中的数据帧?

来自分类Dev

在R中重塑数据框

来自分类Dev

在R中重塑数据帧

来自分类Dev

汇总/重塑R中的数据

来自分类Dev

在R中为多种值类型重塑数据

来自分类Dev

使用列中的固定效果信息重塑R中的数据

来自分类Dev

重塑时间序列中的线组织数据

来自分类Dev

在R中的数据框中重塑数据

来自分类Dev

在R中的数据框中重塑数据

来自分类Dev

使用assign()函数将列名称分配到R中的空数据框中

来自分类Dev

如何使用R中的栅格数据包显示栅格中的所有列名称

来自分类Dev

从 r 中的数据中查找列名称为 1

来自分类Dev

使用dplyr根据列名称更改数据框中的值?

来自分类Dev

在数据框中打印列名称和值

来自分类Dev

R使用向量中的值成为数据框的名称

来自分类Dev

使用pivot_longer重塑r中的数据

来自分类Dev

使用R重塑数据框中的行组织