创建数据框

时间:2012-09-18 18:52:57

标签: r dataframe regression

我的数据设置如下:

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

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

3 个答案:

答案 0 :(得分: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

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

答案 1 :(得分: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

答案 2 :(得分:1)

你应该使用正则表达式来分割字符串以获得两个向量(浓度和时间)。如果您使用R,只需调用

即可创建数据框
data.frame(concentration=concentration,time=time) 

关于你的两个载体。