Как сделать строку имен столбцов и разбить строку на несколько строк - PullRequest
0 голосов
/ 05 июля 2018

Я не знал, как произнести название вопроса, поэтому старался изо всех сил. Я приведу пример моего набора данных. Мы можем назвать набор данных my_data

tibble::tribble(
  ~Pathway, ~log_value, ~ratio, ~z_score,                ~molecules,
     "GHR",      "N/A",  "N/A",    "N/A", "CD40LG,TGFBR1,MYH9,MMP1",
    "TGFB",      "N/A",  "N/A",    "N/A", "ADAMTS8,PIK3R1,HRAS,SEM",
     "PKA",      "N/A",  "N/A",    "N/A", "PIK3CA,PDGFA,PIK3R1,SPH",
     "PKB",      "N/A",  "N/A",    "N/A", "MAST2,PIK3CA,TGFBR1,BAD",
     "PKC",      "N/A",  "N/A",    "N/A", "TGFBR1,AKAP9,CAMK2A,PHK"
  )

Так что я хочу сделать столбец 1 в одну строку, чтобы он был именем для каждой строки. Я также хочу разбить столбец 5 на несколько строк. Так вот что я представляю.

GHR TGFB PKA PKB PKC
CD40LG ADAMTS8 PIK3CA MAST2 TGFBR1
TGFBR1 PIK3R1 PDGFA PIK3CA AKAP9
MYH9 HRAS PIK3R1 TGFBR1 CAMK2A
MMP1 SEM SPH BAD PHK

Так что мне действительно не нужны столбцы 2,3 или 4, поэтому я избавился от них с помощью my_data <- my_data[c(1,5)], а я избавлялся от запятых между именами с помощью my_data$molecules <- as.character(gsub(","," ",my_data$molecules)) там были мои проблемы, но, возможно, вы не нужно использовать это. Поэтому я просто хочу сделать столбец 1 именами строк и разделить столбец 5 на несколько строк, но я изо всех сил пытаюсь это сделать. У кого-нибудь есть совет? Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Ваши данные, проанализированы

df <- tibble::tribble(
      ~Pathway, ~log_value, ~ratio, ~z_score,                ~molecules,
         "GHR",      "N/A",  "N/A",    "N/A", "CD40LG,TGFBR1,MYH9,MMP1",
        "TGFB",      "N/A",  "N/A",    "N/A", "ADAMTS8,PIK3R1,HRAS,SEM",
         "PKA",      "N/A",  "N/A",    "N/A", "PIK3CA,PDGFA,PIK3R1,SPH",
         "PKB",      "N/A",  "N/A",    "N/A", "MAST2,PIK3CA,TGFBR1,BAD",
         "PKC",      "N/A",  "N/A",    "N/A", "TGFBR1,AKAP9,CAMK2A,PHK"
      )

Вот решение с dplyr и tidyr

df %>% select(Pathway, molecules) %>% 
  separate_rows(molecules,sep=",") %>% 
  group_by(Pathway) %>% 
  mutate(id=1:n()) %>% 
  spread(key="Pathway", value="molecules") %>% 
  select(-id)

#> # A tibble: 4 x 5
#>   GHR    PKA    PKB    PKC    TGFB   
#>   <chr>  <chr>  <chr>  <chr>  <chr>  
#> 1 CD40LG PIK3CA MAST2  TGFBR1 ADAMTS8
#> 2 TGFBR1 PDGFA  PIK3CA AKAP9  PIK3R1 
#> 3 MYH9   PIK3R1 TGFBR1 CAMK2A HRAS   
#> 4 MMP1   SPH    BAD    PHK    SEM    

Здесь мы сначала select интересуемся столбцами, а затем разделяем строки запятыми. Следующая задача - повторно преобразовать данные из длинного в широкий формат. Для этого вам понадобится уникальный идентификатор для соответствия строк. Как только вы spread столбец, id может меня удалить

0 голосов
/ 05 июля 2018
 dat=read.table(strings=F,text="Pathway log_value ratio z_score molecules
  GHR N/A N/A N/A CD40LG,TGFBR1,MYH9,MMP1…
            TGFB N/A N/A N/A ADAMTS8,PIK3R1,HRAS,SEM…
            PKA N/A N/A N/A PIK3CA,PDGFA,PIK3R1,SPH…
            PKB N/A N/A N/A MAST2,PIK3CA,TGFBR1,BAD…
            PKC N/A N/A N/A TGFBR1,AKAP9,CAMK2A,PHK…",na.string="N/A",h=T)


 a = data.frame(t(read.table(text=dat$molecules,sep=",")),stringsAsFactors = F)

 setNames(a,dat$Pathway)

      GHR    TGFB    PKA    PKB    PKC
V1 CD40LG ADAMTS8 PIK3CA  MAST2 TGFBR1
V2 TGFBR1  PIK3R1  PDGFA PIK3CA  AKAP9
V3   MYH9    HRAS PIK3R1 TGFBR1 CAMK2A
V4  MMP1…    SEM…   SPH…   BAD…   PHK…
0 голосов
/ 05 июля 2018

Возможно, вы могли бы использовать это -

df = df[, c(1, 5)]

## Split on comma and add to dataframe
tmp = strsplit(df$molecules, ",")
df = cbind(df[, -2], do.call(rbind, tmp))

## Transpose the dataframe
df = t(df)
rownames(df) = NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...