我有一个非常大的数据框,其中包含一系列动作和这些动作的时间戳。
为了可重复性,它看起来类似于此输出...
df <- data.frame(1:10)
df[,1] = c("0", "1", "2", "3", "4", "0", "1", "2", "3", "4")
colnames(df) = c("Clock")
df$client = c("1")
df$action = c("0", "1", "0", "0", "0", "1", "1", "0", "1", "0")
df$experimenter = c("NP", "NP", "NP", "NP", "NP", "TU", "TU", "TU", "TU", "TU")
## output
Clock client action experimenter
0 1 0 NP
1 1 1 NP
2 1 0 NP
3 1 0 NP
4 1 0 NP
0 1 1 TU
1 1 1 TU
2 1 0 TU
3 1 1 TU
4 1 0 TU
如何执行以下操作:
1)在时钟列的数字之间添加行(持续1/4秒)?
2)适当地为Near列填写数据?
输出看起来像这样...
Clock client action experimenter
0 1 0 NP
0.25 1 0 NP
0.50 1 0 NP
0.75 1 0 NP
1 1 1 NP
1.25 1 1 NP
1.50 1 1 NP
1.75 1 1 NP
2 1 0 NP
2.25 1 0 NP
2.50 1 0 NP
2.75 1 0 NP
3 1 0 NP
3.25 1 0 NP
3.50 1 0 NP
3.75 1 0 NP
4 1 0 NP
4.25 1 0 NP
4.50 1 0 NP
4.75 1 0 NP
0 1 1 TU
0.25 1 1 TU
0.50 1 1 TU
0.75 1 1 TU
1 1 1 TU
1.25 1 1 TU
1.50 1 1 TU
1.75 1 1 TU
2 1 0 TU
2.25 1 0 TU
2.50 1 0 TU
2.75 1 0 TU
3 1 1 TU
3.25 1 1 TU
3.50 1 1 TU
3.75 1 1 TU
4 1 0 TU
4.25 1 0 TU
4.50 1 0 TU
4.75 1 0 TU
答案 0 :(得分:1)
在数据中创建组后,我们可以使用complete
和fill
。对于每个组,我们创建一个从Clock
的最小值到最大值+ 0.75的序列,然后按先前的非NA值fill
所有丢失的值。
library(dplyr)
library(tidyr)
df %>%
mutate_at(1:3, as.numeric) %>%
group_by(group = cumsum(c(TRUE, diff(Clock) < 0))) %>%
complete(Clock = seq(min(Clock), max(Clock) + 0.75, by = 0.25)) %>%
ungroup() %>%
select(-group) %>%
fill(everything())
# A tibble: 40 x 4
# Clock client action experimenter
# <dbl> <dbl> <dbl> <chr>
# 1 0 1 0 NP
# 2 0.25 1 0 NP
# 3 0.5 1 0 NP
# 4 0.75 1 0 NP
# 5 1 1 1 NP
# 6 1.25 1 1 NP
# 7 1.5 1 1 NP
# 8 1.75 1 1 NP
# 9 2 1 0 NP
#10 2.25 1 0 NP
# … with 30 more rows
答案 1 :(得分:1)
R的基本解决方案是重复行,然后将分数添加到Clock
变量中:
df2 <- df[rep(seq_len(nrow(df)), each=4),]
df2$Clock <- as.numeric(df2$Clock) + ((0:3)/4)