У меня есть фрейм данных, первые 5 строк которого выглядят следующим образом:
Sample CCT6 GAT1 IMD3 PDR3 RIM15
001 0000000000 111111111111111111111 010001000011 0N100111NNNN 01111111111NNNNNN
002 1111111111 111111111111111111000 000000000000 0N100111NNNN 00000000000000000
003 0NNNN00000 000000000000000000000 010001000011 000000000000 11111111111111111
004 000000NNN0 11100111111N111111111 010001000011 111111111111 01111111111000000
005 0111100000 111111111111111111111 111111111111 0N100111NNNN 00000000000000000
Полный набор данных имеет 2000 образцов. Я пытаюсь написать код, который позволил бы мне сказать, является ли строка чисел для каждого из 5 столбцов однородной (то есть все 1 или 0) во всех моих образцах. В идеале я также хотел бы иметь возможность различать от 1 до 0 в случаях, когда ответом является True
. Из моего примера ожидаемые результаты будут:
Sample CCT6 GAT1 IMD3 PDR3 RIM15
001 TRUE (0) TRUE (1) FALSE FALSE FALSE
002 TRUE (1) FALSE TRUE (0) FALSE TRUE (0)
003 FALSE TRUE (0) FALSE TRUE (0) TRUE (1)
004 FALSE FALSE FALSE TRUE (1) FALSE
005 FALSE TRUE (1) TRUE (1) FALSE TRUE (0)
Я не застрял в использовании логики, и я мог бы использовать символы, если их можно использовать для различения разных классов. В идеале я хотел бы вернуть результаты в аналогичном фрейме данных.
У меня проблемы с самым основным первым шагом, который заключается в том, чтобы R сказал, состоит ли строка из всех одинаковых значений. Я пытался использовать различные выражения, используя grep
и regexpr
, но не смог получить результат, который я могу использовать, чтобы применить весь кадр данных, используя ddply
или что-то подобное. Вот несколько примеров того, что я пробовал на этом шаге:
a = as.character("111111111111")
b = as.character("000000000000")
c = as.character("000000011110")
> grep("1",a)
[1] 1
> grep("1",c)
[1] 1
> regexpr("1",a)
[1] 1
attr(,"match.length")
[1] 1
> regexpr("1",c)
[1] 8
attr(,"match.length")
[1] 1
Я бы очень признателен за любую помощь, которая поможет мне начать с этой проблемой, или поможет мне в достижении моей более крупной цели.