为每个主题ID添加一个额外的行,并在其他列中保留值

Ame*_*mer 5 r

我想为数据框中的每个主题ID添加一个额外的行(如下所示).这行应该有TIME=0和DV=0.其他列中的其他值应保持不变.数据框如下所示:

ID  TIME  DV  DOSE pH
1    1    5    50  4.6 
1    5    10   50  4.6
2    1    6    100 6.0
2    7    10   100 6.0
Run Code Online (Sandbox Code Playgroud)

添加额外的行后,它应如下所示:

ID  TIME  DV  DOSE pH
1    0    0    50  4.6
1    1    5    50  4.6 
1    5    10   50  4.6
2    0    0    100 6.0
2    1    6    100 6.0
2    7    10   100 6.0
Run Code Online (Sandbox Code Playgroud)

我怎么能在R中实现这个目标?

zx8*_*754 5

试试这个:

#dummy data
df <- read.table(text="ID  TIME  DV  DOSE pH
1    1    5    50  4.6 
1    5    10   50  4.6
2    1    6    100 6.0
2    7    10   100 6.0",header=TRUE)

#data with zeros
df1 <- df
df1[,c(2,3)] <- 0
df1 <- unique(df1)

#rowbind and sort
res <- rbind(df,df1)
res <- res[order(res$ID,res$TIME),]
res
#    ID TIME DV DOSE  pH
# 11  1    0  0   50 4.6
# 1   1    1  5   50 4.6
# 2   1    5 10   50 4.6
# 31  2    0  0  100 6.0
# 3   2    1  6  100 6.0
# 4   2    7 10  100 6.0
Run Code Online (Sandbox Code Playgroud)


Dav*_*urg 5

这是另一种可能的data.table解决方案

library(data.table)
setDT(df)[, .SD[c(1L, seq_len(.N))], ID][, 
            indx := seq_len(.N), ID][indx == 1L, 2:3 := 0][]
#    ID TIME DV DOSE  pH indx
# 1:  1    0  0   50 4.6    1
# 2:  1    1  5   50 4.6    2
# 3:  1    5 10   50 4.6    3
# 4:  2    0  0  100 6.0    1
# 5:  2    1  6  100 6.0    2
# 6:  2    7 10  100 6.0    3
Run Code Online (Sandbox Code Playgroud)

  • 怎么样的`dt [,rbind(列表(0,0,DOSE [1L],pH [1L]),. SD),= = ID]`? (2认同)