我有一个数据框:
dd <- read.table(text="
164.91 0
164.96 32
165.01 0
165.11 0
165.16 4
166.16 0")
我想在第二列(dd $ V2)中引入零值来创建一个新的数据帧,其中第一个colomn(dd $ V1)中连续行之间的差异将等于0.01。
结果必须是:
dd <- read.table(text="
164.91 0
164.92 0
164.93 0
164.94 0
164.95 0
164.96 32
164.97 0
...")
答案 0 :(得分:3)
与具有V1的所有中间值的数据框合并。
dd2 <- merge( data.frame(V1=round( seq(head(dd$V1,1), tail(dd$V1,1), by=0.01), digits=2) ),
dd,
by="V1", all.x=TRUE)
> head(dd2)
V1 V2
1 164.91 0
2 164.92 NA
3 164.93 NA
4 164.94 NA
5 164.95 NA
6 164.96 32
> dd2$V2[is.na(dd2$V2)] <- 0
> head(dd2)
V1 V2
1 164.91 0
2 164.92 0
3 164.93 0
4 164.94 0
5 164.95 0
6 164.96 32
答案 1 :(得分:1)
这是你在找什么?您想填写tidyr::complete
中隐式缺失的值。一个很好的工具是V1
。 V1
参数指定fill
可以采用的所有潜在值,V2
参数指定在{0}}行中填写dd <- read.table(text="
164.91 0
164.96 32
165.01 0
165.11 0
165.16 4
166.16 0")
library(tidyr)
dd %>%
complete(
V1 = seq(min(V1), max(V1), by = 0.01),
fill = list(V2 = 0)
)
#> # A tibble: 126 x 2
#> V1 V2
#> <dbl> <dbl>
#> 1 164.91 0
#> 2 164.92 0
#> 3 164.93 0
#> 4 164.94 0
#> 5 164.95 0
#> 6 164.96 32
#> 7 164.97 0
#> 8 164.98 0
#> 9 164.99 0
#> 10 165.00 0
#> # ... with 116 more rows
的内容已存在于数据中。
{{1}}
由reprex package(v0.2.0)创建于2018-03-26。
答案 2 :(得分:0)
您可以通过
执行此操作{{1}}
我希望这有帮助!
答案 3 :(得分:0)
您可以将实际数据加入到具有tidyverse
所有潜在值的数据列中,并将缺失值填充为零。这是library(tidyverse)
dd_new = with(dd, data.frame(V1=seq(min(V1), max(V1), 0.01))) %>%
full_join(dd) %>%
replace_na(list(V2=0))
版本:
V1