Хобрук: Ваш путь к мастерству в программировании

Как заполнить фрейм данных на основе условия в R

Я создал пустой фрейм данных примерно так

                 id Alyr Crub Lala Brap Bole Spar Esal Aara Thas
1 XLOC_003940_TBH_1   NA   NA   NA   NA   NA   NA   NA   NA   NA

Я хотел посмотреть, совпадают ли id и имя столбца, тогда он должен заменить «NA» на определенное значение. Вот пример:

ex1 <- "Alyr_XLOC_003940_TBH_1_Ortholog_Known_Gene_Sense"

sp <- sub("([A-Za-z]+)_(XLOC_\\d+_TBH_1)_([A-Za-z_]+)","\\1", ex1)
gene <- sub("([A-Za-z]+)_(XLOC_\\d+_TBH_1)_([A-Za-z_]+)","\\2", ex1)
fun <- sub("([A-Za-z]+)_(XLOC_\\d+_TBH_1)_([A-Za-z_]+)","\\3", ex1)

Основываясь на приведенном выше примере, я хотел получить что-то вроде этого

                 id        Alyr                  Crub Lala Brap Bole Spar Esal Aara Thas
1 XLOC_003940_TBH_1   Ortholog_Known_Gene_Sense   NF   NF   NF   NF   NF   NF   NF   NF

Я застрял здесь и не могу понять, как я могу это сделать?

07.08.2016

Ответы:


1

Используйте подмножество матрицы:

df1$id <- gene
df1[cbind(1:nrow(df1), match(sp, names(df1)))] <- fun

Проверьте этот ответ, чтобы узнать больше о подразделении фрейма данных на два- матрица столбцов.

##Example
nms <- scan(what="character", text="id Alyr Crub Lala Brap Bole Spar Esal Aara Thas")
df1 <- as.data.frame(matrix(NA, 3, 10))
names(df1) <- nms
df1
#  id Alyr Crub Lala Brap Bole Spar Esal Aara Thas
#1 NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
#2 NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
#3 NA   NA   NA   NA   NA   NA   NA   NA   NA   NA


ex1 <- c("Alyr_XLOC_003940_TBH_1_Ortholog_Gene",
         "Lala_XLOC_1234_TBH_1_Lalala_Gene",
         "Thas_XLOC_5678_TBH_1_Thasthas_Gene")

sp <- sub("([A-Za-z]+)_(XLOC_\\d+_TBH_1)_([A-Za-z_]+)","\\1", ex1)
gene <- sub("([A-Za-z]+)_(XLOC_\\d+_TBH_1)_([A-Za-z_]+)","\\2", ex1)
fun <- sub("([A-Za-z]+)_(XLOC_\\d+_TBH_1)_([A-Za-z_]+)","\\3", ex1)

df1$id <- gene
df1[cbind(1:nrow(df1), match(sp, names(df1)))] <- fun
df1
  #                  id          Alyr Crub        Lala Brap Bole Spar Esal Aara          Thas
  # 1 XLOC_003940_TBH_1 Ortholog_Gene   NA        <NA>   NA   NA   NA   NA   NA          <NA>
  # 2   XLOC_1234_TBH_1          <NA>   NA Lalala_Gene   NA   NA   NA   NA   NA          <NA>
  # 3   XLOC_5678_TBH_1          <NA>   NA        <NA>   NA   NA   NA   NA   NA Thasthas_Gene
07.08.2016
  • Спасибо, это сработало. Я только что добавил это df1[is.na(df1)] <- "Not found". 07.08.2016
  • Новые материалы

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

    Обзор 20 основных и современных методов работы с массивами в JavaScript
    Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

    Да, но я чувствую необходимость указать, что это или не единственные два.
    Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.