在R

时间:2018-03-26 20:32:11

标签: r dataframe

我有一个数据框:

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 
...")

4 个答案:

答案 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中隐式缺失的值。一个很好的工具是V1V1参数指定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