3

我的数据是这样设置的:

site    date      amb   ppm1   ppm2   ppm3   time0   time1   time2   time3
A       5/6/12     350   370    380   385     0       3        6       9

我需要它的格式有 2 列(一个是浓度,另一个是时间)

conc   time
350      0
370      3
380      6
385      9

这样我就可以对其进行回归。或者帮助如何在原始设置上运行回归会很棒。

4

3 回答 3

3

使用您的示例数据,并假设您data.frame被称为“mydf”,您可以使用stack每个“组”列来获取您显示的输出:

setNames(data.frame(stack(mydf[, grep("^ppm|^amb", names(mydf))])[-2], 
                    stack(mydf[, grep("^time", names(mydf))])[-2]), 
         c("conc", "time"))
#   conc time
# 1  350    0
# 2  370    3
# 3  380    6
# 4  385    9
  • grep被使用,只是作为一个例子,如果你有许多类似命名的列并且不想计算来识别它们的列索引。如果这确实代表您的数据,stack也可能只是stack(mydf[, 3:6])[-2]stack(mydf[, 7:10])
  • setNames只是重命名输出中的列名的便捷功能。
  • 只是从每个命令中[-2]删除第二列stack(这是从中获取值的列名的列)。

如果您不介意将“abm”的变量名更改为“ppm0”,另一种选择是使用reshape

names(mydf)[3] <- "ppm0"
reshape(mydf, direction = "long", idvar = 1:2, 
        timevar = "measure", varying = 3:ncol(mydf), sep = "")
#            site   date measure ppm time
# A.5/6/12.0    A 5/6/12       0 350    0
# A.5/6/12.1    A 5/6/12       1 370    3
# A.5/6/12.2    A 5/6/12       2 380    6
# A.5/6/12.3    A 5/6/12       3 385    9

当然,您可以非常轻松地删除前三列。

于 2013-03-13T06:31:42.657 回答
2

如果您的数据是单个向量:

> mydata <- c("A", "5/6/12", 350, 370, 380, 385, 0, 3, 6, 9)

你的名字加了:

> names(mydata) <- c("site", "date", "amb" ,"ppm1","ppm2","ppm3","time0","time1","time2","time3")

有点像你上面描述的:

> mydata
  site     date      amb     ppm1     ppm2     ppm3    time0    time1    time2    time3 
  "A"  "5/6/12"    "350"    "370"    "380"    "385"      "0"      "3"      "6"      "9"

并对其进行改造,您可以这样做:

> data.frame(conc=mydata[3:6],time=mydata[7:10])

这将导致

       conc time
  amb   350    0
  ppm1  370    3
  ppm2  380    6
  ppm3  385    9
于 2013-04-13T01:34:48.320 回答
1

您应该使用正则表达式来拆分字符串以获得两个向量(浓度和时间)。如果您使用的是 R,您只需调用即可创建一个数据框

data.frame(concentration=concentration,time=time) 

在你的两个向量上。

于 2013-03-12T21:06:23.633 回答