Определите уникальные значения в столбце и переименуйте их в новый столбец - PullRequest
0 голосов
/ 17 сентября 2018

Мне нужен совет относительно манипуляции с фреймом данных в R. Я делаю анализ клональности клеток и пытаюсь сгруппировать клетки в расширенные или нерасширенные клоны.

У меня есть фрейм данных, как показано ниже:

Cell    Ident   Count   Clonality
C1      A       5       Expanded
C2      B       3       Expanded
C3      A       5       Expanded
C4      C       2       Unexpanded
C5      A       5       Expanded
C6      B       3       Expanded
C7      C       2       Unexpanded
C8      A       5       Expanded
C9      A       5       Expanded
C10     B       3       Expanded

Для столбца клональности я сделал цикл, который идентифицирует строки с счетами> = 3 как развернутые, а строки с счетами <3 как нерасширенные. </p>

Однако я хотел идентифицировать строки с количеством <3 как нерасширенные, а для строк с числом> = 3 - идентифицировать их как расширенные # в соответствии с их идентичностью.

Я надеюсь, что мой окончательный фрейм данных будет выглядеть так:

Cell    Ident   Count   Clonality
C1      A       5       Expanded 1
C2      B       3       Expanded 2
C3      A       5       Expanded 1
C4      C       2       Unexpanded
C5      A       5       Expanded 1
C6      B       3       Expanded 2
C7      C       2       Unexpanded
C8      A       5       Expanded 1
C9      A       5       Expanded 1
C10     B       3       Expanded 2

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

for (n in 1:nrow(df)){
  count <- df$Count[n]
  if (count >= 3){
    df$Clonality[n] <- "Expanded"
  } else {
    df$Clonality[n] <- "Unexpanded"
  }
}

Надеюсь, что кто-то может направить меня сюда.

1 Ответ

0 голосов
/ 17 сентября 2018

Вы можете сделать это:

library(tidyverse)
df %>%
    mutate_if(is.factor, as.character) %>%
    mutate(Clonality = if_else(
        Clonality == "Expanded",
        sprintf("%s %i", Clonality, as.factor(Ident)),
        Clonality))
#   Cell Ident Count  Clonality
#1    C1     A     5 Expanded 1
#2    C2     B     3 Expanded 2
#3    C3     A     5 Expanded 1
#4    C4     C     2 Unexpanded
#5    C5     A     5 Expanded 1
#6    C6     B     3 Expanded 2
#7    C7     C     2 Unexpanded
#8    C8     A     5 Expanded 1
#9    C9     A     5 Expanded 1
#10  C10     B     3 Expanded 2

Объяснение: Мы преобразуем записи в Clonality, добавив уровень factor Ident (что означает A => 1, B=> 2 и т. Д.), Если и только если Clonality == Expanded.


или в базе R с использованием transform

df <- transform(df, Clonality = ifelse(
    Clonality == "Expanded",
    sprintf("%s %i", Clonality, as.factor(Ident)),
    as.character(Clonality)))
df
#   Cell Ident Count  Clonality
#1    C1     A     5 Expanded 1
#2    C2     B     3 Expanded 2
#3    C3     A     5 Expanded 1
#4    C4     C     2 Unexpanded
#5    C5     A     5 Expanded 1
#6    C6     B     3 Expanded 2
#7    C7     C     2 Unexpanded
#8    C8     A     5 Expanded 1
#9    C9     A     5 Expanded 1
#10  C10     B     3 Expanded 2

Пример данных

df <- read.table(text =
    "Cell    Ident   Count   Clonality
C1      A       5       Expanded
C2      B       3       Expanded
C3      A       5       Expanded
C4      C       2       Unexpanded
C5      A       5       Expanded
C6      B       3       Expanded
C7      C       2       Unexpanded
C8      A       5       Expanded
C9      A       5       Expanded
C10     B       3       Expanded", header = T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...