我的数据设置如下:
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
这样我就可以对它进行回归。或者帮助如何在原始设置上运行回归会很棒。
答案 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)
关于你的两个载体。