R - Сдвигающие ячейки / Вставить NA, если предыдущая ячейка содержит строковый образец - PullRequest
0 голосов
/ 12 июня 2018

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

filename    day    V1        V2        V3        V4        V5
  A01        1   gha1@10   gha2@No    phb1@45   phb2@3      NA
  A01        2   gha1@12   gha2@No    phb1@23   phb2@32     NA
  A02        1   gha1@8    gha2@Yes   gha3@4    phb1@21   phb2@14
  A02        2   gha1@3    gha2@No    phb1@2    phb2@13     NA
  A03        1   gha1@9    gha2@Yes   gha3@3    phb1@22   phb2@13
  A03        2   gha1@4    gha2@Yes   gha3@5    phb1@12   phb2@17
  A04        1   gha1@14   gha2@Yes   gha3@12   phb1@11   phb2@9
  A04        2   gha1@10   gha2@Yes   gha3@12   phb1@10   phb2@8

Эти данные взяты из анкеты, где, учитывая ответ на вопрос в V2 (gha2 @), люди давали или нетвопрос гха @ 3.Однако, как вы можете видеть, V3 смешивает и gha3 @, и phb1 @.

В конце я хотел бы закончить с этим:

filename    day    V1        V2        V3        V4        V5
  A01        1   gha1@10   gha2@No     NA       phb1@45   phb2@3
  A01        2   gha1@12   gha2@No     NA       phb1@23   phb2@32
  A02        1   gha1@8    gha2@Yes   gha3@4    phb1@21   phb2@14
  A02        2   gha1@3    gha2@No     NA       phb1@2    phb2@13
  A03        1   gha1@9    gha2@Yes   gha3@3    phb1@22   phb2@13
  A03        2   gha1@4    gha2@Yes   gha3@5    phb1@12   phb2@17
  A04        1   gha1@14   gha2@Yes   gha3@12   phb1@11   phb2@9
  A04        2   gha1@10   gha2@Yes   gha3@12   phb1@10   phb2@8

Так что яЯ пытаюсь «сдвинуть» несколько ячеек вправо или вставить «NA», если предыдущая ячейка содержит «gha2 @ No», но мои знания в области R не позволяют мне находить полезные решения (и, очевидно, мои навыки работы с Google): /

Спасибо за ваши ответы (и извините за приблизительный английский)!

TL; DR: у меня есть данные из вопросника с неравным количеством ответов на строку: если вы говорите "да, скажем, на вопрос 3, вам задают дополнительный вопрос 3б.Если вы говорите «нет», вам задают вопрос 4. Поэтому я получаю несколько столбцов, которые смешивают дополнительный вопрос 3b и следующий вопрос 4. Поэтому я хотел бы вставить NA, если предыдущая ячейка содержит определенный шаблонна вопрос 3 (в данном случае «нет»).

1 Ответ

0 голосов
/ 12 июня 2018
read.table(text = "
           filename    day    V1        V2        V3        V4        V5
            A01        1   gha1@10   gha2@No    phb1@45   phb2@3      NA
           A01        2   gha1@12   gha2@No    phb1@23   phb2@32     NA
           A02        1   gha1@8    gha2@Yes   gha3@4    phb1@21   phb2@14
           A02        2   gha1@3    gha2@No    phb1@2    phb2@13     NA
           A03        1   gha1@9    gha2@Yes   gha3@3    phb1@22   phb2@13
           A03        2   gha1@4    gha2@Yes   gha3@5    phb1@12   phb2@17
           A04        1   gha1@14   gha2@Yes   gha3@12   phb1@11   phb2@9
           A04        2   gha1@10   gha2@Yes   gha3@12   phb1@10   phb2@8", header = T) -> df


library(dplyr)

df %>% mutate_if(is.factor, as.character) -> df


df %>% 
  filter(V2 == "gha2@No") %>% 
  rename(V4 = V3, V5 = V4, V3 = V5) -> df_temp

df %>% 
  filter(V2 == "gha2@Yes") %>% 
  full_join(df_temp) %>% 
  arrange(filename)


  filename day      V1       V2      V3      V4      V5
1      A01   1 gha1@10  gha2@No    <NA> phb1@45  phb2@3
2      A01   2 gha1@12  gha2@No    <NA> phb1@23 phb2@32
3      A02   1  gha1@8 gha2@Yes  gha3@4 phb1@21 phb2@14
4      A02   2  gha1@3  gha2@No    <NA>  phb1@2 phb2@13
5      A03   1  gha1@9 gha2@Yes  gha3@3 phb1@22 phb2@13
6      A03   2  gha1@4 gha2@Yes  gha3@5 phb1@12 phb2@17
7      A04   1 gha1@14 gha2@Yes gha3@12 phb1@11  phb2@9
8      A04   2 gha1@10 gha2@Yes gha3@12 phb1@10  phb2@8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...