Замена пустых ячеек в столбце значениями из другого столбца в R - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь перенести значения ячеек из столбца StudyID в столбец SigmaID пустых ячеек, но у меня возникает странная проблема с выводом.

Вот как мои данные выглядят перед запуском команд.

StudyID    Gender  Region  SigmaID
LM24008      1       20    LM24008  
LM82993      1       16    LM28888  
ST04283      0       44      
ST04238      0       50      
LM04829      1       24    LM23921  
ST91124      0       89
ST29001      0       55

Я попытался выполнить это, написав синтаксис тремя способами, потому что я не был уверен, есть ли проблема со способом настройки logi c. Все три производят одинаковый вывод.

df$SigmaID <- ifelse(test = df$SigmaID != "", yes = df$SigmaID, no = df$StudyID)

df$SigmaID <- ifelse(df$SigmaID == "", df$StudyID, df3$SigmaID)

df %>% mutate(SigmaID = ifelse(Gender == 0, df$StudyID, df$SigmaID)

Вывод: вместо того, чтобы извлекать значения из столбца StudyID, он заполняет от одного до четырех чисел di git.

StudyID    Gender  Region  SigmaID
LM24008      1       20    LM24008  
LM82993      1       16    LM28888  
ST04283      0       44    5  
ST04238      0       50    4908  
LM04829      1       24    LM23921
ST91124      0       89    209
ST29001      0       55    4092

Я попытался перекодировать пустые пространства в NA, а затем вызвать NA в logi c, но это дало тот же результат, что и выше. Мне интересно, может ли это иметь какое-либо отношение к типу переменной или атрибутам переменных, и что-то не так с тем, как он читает символы в StudyID. Буду признателен за отзывы по этому вопросу!

Ответы [ 2 ]

0 голосов
/ 23 июня 2020

В продолжение этого! Как оказалось, R по умолчанию преобразует строковые типы в множители. Есть несколько способов решения указанной выше проблемы.

i <- sapply[df, is.factor]
df[i] <- lapply(df[i], as.character)

Другой метод:

df <- read.csv("/insert file pathway here", stringAsFactors = FALSE)

Это то, что я считаю полезным! Я уверен, что есть и другие методы устранения неполадок.

0 голосов
/ 16 июня 2020

Вот как это сделать:

df$SigmaID[df$SigmaID == ""] = df$StudyID[df$SigmaID == ""]

df[df$SigmaID == ""] выбирает только строки, где SigmaID==""

Я также рекомендую использовать data.table вместо data.frame. Он быстрее и имеет несколько полезных синтаксических функций:

library(data.table)
setDT(df) # setDT converts a data.frame to a data.table
df[SigmaID=="",SigmaId:=StudyID]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...