我的数据被设置为这样:创建一个数据帧
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
,这样我可以格式对其进行回归。或者帮助如何对原始设置进行回归会很好。
我的数据被设置为这样:创建一个数据帧
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
,这样我可以格式对其进行回归。或者帮助如何对原始设置进行回归会很好。
您应该使用正则表达式来分割字符串以获得您的两个向量(浓度和时间)。如果您使用的是R,您只需致电
data.frame(concentration=concentration,time=time)
您的两个向量创建一个数据帧。
使用您的样本数据,并假设你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
命令(它是从中取值的列名称列)中删除第二列。另一种选择,如果你不介意改变“反导”的变量名“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
你可以,当然,降前三列很容易。
如果你的数据是一个向量:
> 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
这是你犯了一个非常重大的假设,该数据是单一载体。从您的示例输入中可以看出,所有内容都被强制转换为字符,但它们不在OP数据中。 – A5C1D2H2I1M1N2O1R2T1
@AnandaMahto这只是我尝试重现OP的数据结构的方式,他没有指定他从哪里复制数据输入。如果引号很麻烦,可以将它们添加为“factor”。我只是补充一点,以防它可能是一个简单的问题,作为替代方案。 – user2276428
没问题。有替代品永远是好事。我的观点主要是你在回答中做出了一个很大的假设。不幸的是,OP似乎是一个屡试不爽的用户,所以我们可能永远不知道他们的数据的实际结构的真相:) – A5C1D2H2I1M1N2O1R2T1