如何从R中左边的值中填充缺失的值,但只能填充1行

  • 本文关键字:填充 1行 左边 r
  • 更新时间 :
  • 英文 :


我需要在R中从列到左边填充一些缺失的值,但我只想对某些行这样做。

我的数据如下:

structure(list(...2 = c(NA, NA, "2 - 3", "3 - 4", "4 - 5"), ...4 = c("Wgt", 
"Port", NA, "2", "20"), ...5 = c("Wgt", "Bench", "3", "9", "20"
), ...6 = c("Wgt", "+/-", "Wgt", "-1", "-12"), ...7 = c("Pos", 
"Port", "Wgt", "-10", NA), ...8 = c("Pos", "Bench", NA, NA, NA
), ...9 = c("Pos", "+/-", NA, NA, NA)), row.names = c(NA, -5L
), class = c("tbl_df", "tbl", "data.frame"))

我希望第一排看起来像:

structure(list(...2 = c(NA, NA, "2 - 3", "3 - 4", "4 - 5"), ...4 = c("Wgt", 
"Port", NA, "2", "20"), ...5 = c("NA", "Bench", "3", "9", "20"
), ...6 = c("NA", "+/-", "Wgt", "-1", "-12"), ...7 = c("Pos", 
"Port", "Wgt", "-10", NA), ...8 = c("NA", "Bench", NA, NA, NA
), ...9 = c("NA", "+/-", NA, NA, NA)), row.names = c(NA, -5L), class = c("tbl_df", 
"tbl", "data.frame"))

在这个例子中,我只想为第1行填充缺失的NA值。另一个缺失的价值需要保留。

我尝试使用下面的zoo代码,但它会填充整个数据集的NA。

library(zoo)
new.data <-new.data %>%
mutate(...4 = as.character(...4)) %>%
pmap_dfr(., ~ na.locf(c(...)) %>%
as.list %>%
as_tibble)

我使用R 3.5.3

有没有办法告诉R这样做?

感谢

您可以通过切片将NA分配给这些列,然后将值更改为NA,然后rbind创建最终的数据帧:

也许有一种更优雅的方法可以做到这一点,但它就在这里。

library(dplyr)                                                                                                                                                                                                                                                                                                                                                                                                                  
library(naniar)
df_new <- df %>%
slice(1) %>%
mutate("...5" = NA) %>%
mutate("...6" = NA) %>%
mutate("...8" = NA) %>%
mutate("...9" = NA)
df <- df %>%
slice(2:n())
final <- rbind(df_new, df)

根据Matt的建议,这是我创建的代码。

# Takes the row of the data that we want to work with and puts it in a new df.
new.data2 <- new.data[1,]
# it assigns NA values to the last known value to the left.
new.data2 <-new.data2 %>%
mutate(...4 = as.character(...4)) %>%
pmap_dfr(., ~ na.locf(c(...)) %>%
as.list %>%
as_tibble)
# combines the two data sets
new.data <- rbind(new.data2, new.data)
# removes the original row that we did the operation on 
new.data <- new.data[-c(2),]

最新更新