根据个人信息生成新数据集

时间:2014-11-16 04:13:40

标签: r

我有这样的数据集:

df <- data.frame(ID=1:10, baseline = c(1.8,2.4,3.2,2.3,2.1,2.2,3,2.8,2,2.9))

我想创建一个名为&#34; response&#34;的新列,应该根据以下公式创建此列:

个人反应=个人基线+ 0.5 *罪(2 * 3.14 *(t-7.5)/ 24)

在该等式中,t是基于该向量生成的

t=rep(seq(0,24,by=0.1))

因此,对于每个ID,应该生成241个响应。如何生成包含ID,基线,时间和响应的新数据集?

2 个答案:

答案 0 :(得分:0)

尝试

library(reshape2)
res <- melt(apply(df[,2, drop=FALSE], 1, 
           function(x) x+0.5*sin(2*3.14*(t-7.5)/24)))

indx <- rep(1:nrow(df), each=241)


df1 <- cbind(df[indx,], time= rep(t, nrow(df)), response=res[,3])
row.names(df1) <- NULL
dim(df1)
#[1] 2410    4

head(df1,3)
#  ID baseline time response
#1  1      1.8  0.0 1.337870
#2  1      1.8  0.1 1.333034
#3  1      1.8  0.2 1.328518

或者

t <- seq(0,24, by=0.1)
indx <- rep(1:nrow(df), each=length(t))
df2 <- within(df[indx,], {response<-baseline+0.5*sin(2*3.14*(t-7.5)/24)
                          time <- t})

row.names(df2) <- NULL
all.equal(df1, df2)
#[1] TRUE

答案 1 :(得分:0)

另一种方法:

t <- rep(seq(0, 24, by = 0.1), each = nrow(df))
vals <- 0.5 * sin(2 * 3.14 * (t - 7.5) / 24)
new_df <- cbind(df, t, response = df$baseline + vals)