我想在TIME = 0时为每个主题(ID)插入一个额外的行。
添加的行应包含相同的列值,A和B除外,对于所有主题,应更改为2和-2。每个主题的所有其他列值应保持不变。以下示例说明了我想为一个主题做些什么:
ID = c(1,1,1,1)
TIME = c(0,1, 2,3)
CONC= c(0,6,12,9)
A= c(1,2,2,2)
B=c(0,0,0,0)
C=c(1,0,0,0)
DF1 = data.frame(ID, TIME, CONC, A, B,C)
#add row for every new ID with A now = 2 and B = -2. All other columns must remain the same.
ID = c(1,1,1,1,1)
TIME = c(0,0,1, 2,3)
CONC= c(0,0,6,12,9)
A= c(1,2,2,2,2)
B=c(0,-2,0,0,0)
C=c(1,1,0,0,0)
DF2 = data.frame(ID, TIME, CONC, A, B,C)
该程序应对数据框中的所有ID执行此操作。
你们中有谁知道这样做的聪明方法吗?任何帮助将不胜感激。
答案 0 :(得分:1)
如果使用此实用程序功能,则可以添加要描述的行。一般过程是
TIME == 0
的行。 TIME != 0
。library(dplyr)
insertRow0 <- function(D){
id <- D$ID[1]
bind_rows(filter(D, TIME == 0),
data_frame(ID = id,
TIME = 0,
A = 2,
B = -2)) %>%
zoo::na.locf() %>%
bind_rows(filter(D, TIME != 0))
}
为每个ID运行此操作就像
一样简单DF1 %>%
group_by(ID) %>%
do(insertRow0(.))
答案 1 :(得分:1)
使用dplyr
library(dplyr)
DF1 %>%
filter(TIME == 0) %>% # select everything at TIME = 0
mutate(A = 2, B = -2) %>% # replace A with 2 and B with -2
bind_rows(DF1) # append the original data