Как я могу заполнить пропущенные значения из значения слева в R, но только для 1 строки? - PullRequest
0 голосов
/ 04 марта 2020

Мне нужно заполнить некоторые пропущенные значения в 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"))

В этом примере я хочу заполнить только недостающие значения NA в строке 1. Другое пропущенное значение должно остаться.

Я попытался использовать приведенный ниже код зоопарка, но он заполнит NA для всего набора данных.

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

I использую R 3.5.3

Есть ли способ сказать R, чтобы сделать это?

Спасибо

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

По предложению Мэтта, это код, который я создал.

# 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),]
0 голосов
/ 05 марта 2020

Вы можете назначить 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...