我需要在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),]