заполнить недостающие элементы в каждой строке в R data.frame - PullRequest
2 голосов
/ 09 мая 2020

У меня есть файл csv, импортированный как data.frame, проблема в том, что каждая строка должна иметь 4 элемента (4 столбца), а некоторые из них могут иметь разное количество элементов, я имею в виду что-то вроде:

ID  col1 col2 col3 col4
id1  dA  dB    dC   dD
id2  aA  aB    aC   aD
id3  mA  mB    mC
id4  xA  xB    xC   XD

Я использую tidyr, и когда я импортирую данные, он заполняет каждый недостающий элемент с помощью NA, в данном случае id3 в столбце 4.

id3  mA  mB    mC NA

Я хочу исправить всю строку, которая иметь менее 4 элементов в каждой строке (например, id3), просто чтобы добавить в недостающий элемент неклассифицированный (UN C) что-то вроде:

ID  col1 col2 col3 col4
id1  dA  dB    dC   dD
id2  aA  aB    aC   aD
id3  mA  mB    mC  UNC
id4  xA  xB    xC   XD

Ну, это мой код:

df <- read.csv("file.csv", comment.char = "#", header = TRUE, sep = "\t")

#add the id as row name:
rownames(df) <- paste("id", 1:nrow(df), sep = "")

# eliminate some elements of the data frame 
df[, 2:ncol(df)] <- NULL

# add a name of each column and split elements based in ";" character 
#at this point the "df" has a single column named "old_name":

df <- df %>% tidyr::separate(old_name, c("col1", "col2", "col3", "col4"), sep = ";", extra="drop")

любое предложение !!!

большое спасибо

1 Ответ

2 голосов
/ 09 мая 2020

Мы можем использовать

library(dplyr)
df1 %>%
    mutate_if(is.character, ~ replace(., is.na(.), "UNC"))

Или в base R

i1 <- sapply(df1, is.character)
df1[i1][is.na(df1[i1])] <- "UNC"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...