방명록

  1. 꾸리꾸리 2020.01.06 18:13  수정/삭제  댓글쓰기

    안녕하세요. 개인적으로 여쭤보고 싶은게 있어서 글을 남깁니다.

    R프로그램이나 리눅스내에서 circos plot에 대해 알고 계신지와 혹시 알고 계시다면 테스트 해보신게 있는지 궁금합니다.

  2. 꾸리꾸리 2019.12.26 15:02  수정/삭제  댓글쓰기

    안녕하세요 질문좀 드리겠습니다.

    AAA a 100 b 200 a 300 b 400
    BBB a 250 b 350 a 450 b 550 a 650 b 750 a 800 b 910

    이런식으로 100개의 행이 있고 열 개수는 각 행마다 다릅니다.

    위의 예제를 설명 드리면,
    첫 번째 행 AAA는 0에서 100까지는 a 영역 100부터 200까지는 b영역이라는 의미 입니다.
    진행하고자 하는 것은 a(빨간색) b(파란색)에 대해 각각 색상을 나타내고자 합니다.
    위의 예시데이터를 결과로 말씀드리자면,
    AAA는 0부터 100까지는 빨간색, 100부터 200까지는 파란색, 200부터 300까지는 빨간색 ...
    혹시 이러한 방법을 진행하기 위해서는 어떻게 해야 할지 도움을 주시면 감사하겠습니다.


    • R Friend R_Friend 2019.12.26 19:58 신고  수정/삭제

      안녕하세요 꾸리꾸리님,

      아래 블로그 포스팅을 참고하세요.

      https://rfriend.tistory.com/504

      python으로 텍스트 파일을 라인별로 읽어들인 후에 파싱하고, id('AAA', 'BBB') 그룹별로 시작(bin_start), 끝(bin_end) 지점을 칼럼으로 만들었습니다.

    • 꾸리꾸리 2019.12.30 17:01  수정/삭제

      질문에 대한 답변 정말 감사 드립니다.
      아울러, 추가 질문좀 드리겠습니다.

      1.저는 파이썬을 이용하지 않는데, 혹시 R프로그램으로 가능한 방법이 있을까요?
      2. 포스트에 올려주신 color_range.txt 데이터로 누적 막대 그래프를 R프로그램에서 구현이 가능할까요?
      ex) 1행을 예로 들면, 0부터 100까지는 'a'이기 때문에 (빨간색), 100부터 200까지는 'b'이기 때문에 (파란색), 200부터 300까지 'a' (빨간색), 300부터 400까지 'b'( 파란색)

    • R Friend R_Friend 2019.12.30 19:16 신고  수정/삭제

      안녕하세요 꾸리꾸리님,

      1. Python 코드를 R로 포팅하는 것은 제가 너무 바빠서 해드릴 수 없습니다. Python으로 했던 것과 동일한 절차대로 R로 진행하시면 되므로 Python 코드를 참고해서 직접 해보시면 좋겠습니다.

      2. R ggplot2로 누적 막대그래프 그리는 코드는 https://rfriend.tistory.com/69 의 제일 하단 부분을 참고하세요.

    • R Friend R_Friend 2019.12.30 20:44 신고  수정/삭제

      꾸리꾸리님, 혹시 bioinformatics 전공하고 계신가요?

    • 꾸리꾸리 2019.12.31 10:01  수정/삭제

      네 bioinformatics 전공입니다.

    • 꾸리꾸리 2020.01.02 15:52  수정/삭제

      R_friend님 질문에 대한 답변 감사드립니다. 포스팅 작성글 참고하면서 실 데이터에 적용하니 결과가 다르게 나오는 것을 확인하였습니다.
      ex)
      Chr10(tab) IG001(tab) 0(tab) a(tab) 100(tab) b(tab) 200(tab) a(tab) 300
      Chr10(tab) IG002(tab) 0 b 450 a 990 h 1350 a 1890

      맨 처음 질문드린 예제보다 앞쪽에 열이 2개가 생겼을 때, 포스팅 해주신 파이썬 스크립트를 진행시 결과가 다르게 나옵니다. 혹시 시간이 되신다면 새로 작성한 예시(실데이터)로 확인 부탁드려도 될까요?

    • R Friend R_Friend 2020.01.03 10:35 신고  수정/삭제

      df 만드는 부분을 새로 올려주신 데이터 포맷에 맞게 수정했습니다. 아래 코드 참고하세요. df 만든 이후의 코드는 포스팅 내용과 동일합니다.

      방명록에 코드 들여쓰기가 안되는데요, Python IDE(ex. Spyder)에서 indentation 맞게 조정해야 할거예요.

      import pandas as pd
      import os

      cwd = getcwd()
      file_path = os.path.join(cwd, 'color_range.txt')

      df = pd.DataFrame()

      f = open(file_path)

      for line in f.readlines():
      id_list = []
      color_list = []
      bin_list = []

      line = line.strip()
      line = line.replace('"', '')

      id = line[:11]
      id = id.replace('\t', '_')

      val = line[12:]
      val_split = val.split('\t')

      for i in range(len(val_split)):
      if val_split[i].isalpha():
      id_list.append(id)
      color_list.append(val_split[i])
      elif val_split[i] != '0':
      bin_list.append(val_split[i])

      df_tmp = pd.DataFrame({
      'id': id_list,
      'color_cd': color_list,
      'bin_end': bin_list
      })

      df = pd.concat([df, df_tmp], axis=0, ignore_index=True)

      f.close()

      print(df)

  3. seohyogi@gmail.com 2019.12.17 01:05  수정/삭제  댓글쓰기

    여러번 들렸는데 방명록이 있는줄 몰랐네요.
    R/python 잘 보고 있습니다.
    앞으로도 좋은 내용 많이 기대할께요.

  4. Lighth 2019.11.23 11:48  수정/삭제  댓글쓰기

    안녕하세요, 오랜만에 다시 질문입니다. 예로 데이터가
    Abcd.201101
    Defg.201101
    Gggg.201103
    Kfhf.201112

    이런식으로 이름, 년, 월만으로 많은데이터가 저장되어있을때
    혹시 이름과 상관없이 월별로 저장할 수 있는지 궁금합니다.

    • R Friend R_Friend 2019.11.23 11:51 신고  수정/삭제

      안녕하세요.
      제일 뒤의 두자리의 월별만 따로 떼어서 저장을 하려고 하는 것인지요?

    • Lighth 2019.11.23 11:53  수정/삭제

      아뇨 . 기준으로 년도 포함입니다

    • Lighth 2019.11.23 11:54  수정/삭제

      예로 저장시에는
      1월 abcd.201101, defg.201101
      12월 kfhf.201112
      이런식이요

    • R Friend R_Friend 2019.11.23 12:14 신고  수정/삭제

      안녕하세요 Lighth님,
      '.' 구분자를 기준으로 문자열을 잘라서 년/월 칼럼을 새로 만들어본 아래 코드 참고하세요.
      이 외에도 뒤에서부터 6자리 문자열을 잘라서 칼럼을 만든다든지, regular expression을 사용해서 년월 형태의 숫자만 골라내는 방법도 생각해볼 수 있겠네요.

      df <- data.frame(c("Abcd.201101", "Defg.201101", "Gggg.201103", "Kfhf.201112"))
      names(df) <- "rawdata"

      df
      1 Abcd.201101
      2 Defg.201101
      3 Gggg.201103
      4 Kfhf.201112


      year_month <- data.frame(do.call('rbind',
      strsplit(as.character(df$rawdata),
      split = '.',
      fixed = TRUE)))[,2]

      df$year_month <- year_month
      df_201101 <- subset(df, subset = (year_month == '201101'))

      df_201101
      rawdata year_month
      1 Abcd.201101 201101
      2 Defg.201101 201101

    • R Friend R_Friend 2019.11.24 20:48 신고  수정/삭제

      Lighth님,
      문제가 잘 해결되었으면 해결되었다고 답글을 달아주시기 바랍니다.

  5. 초코초코 2019.11.17 08:37  수정/삭제  댓글쓰기

    안녕하세요 선생님. 선생님의 친절하고 자세한 설명 덕분에 Rstudio를 유용하게 사용하고 있는 한 사람입니다. 항상 감사드립니다.
    다름이 아니라, 질문을 하나 하고싶은데 gcookbook 패키지에 있는 cabbage_exp 데이터를 활용하여 다음과 같은 형태의 정보(테이블)을 출력가능한 코드를 작성하고 싶은데, 어떻게 해야할지 여쭤보고 싶습니다.
    Cultivar d16 d20 d21
    1 c39 3.18 2.8 2.74
    2 c52 2.26 3.11 1.47

    na를 제거하고 같은 cultivar 기준으로 열을 합치는 방법을 잘 모르겠습니다... 혹시 방법을 알려주신다면 정말 감사하겠습니다. 감사합니다.

    • R Friend R_Friend 2019.11.17 11:54 신고  수정/삭제

      안녕하세요 초코초코님,
      블로그 좋게 봐주셔서 감사합니다.

      아래의 코드를 참고해서 한번 실행해보시기 바랍니다. 혹시 결측값을 제거(drop)하는 대신에 다른 값으로 대체하고 싶으신 경우는 fill 옵션을 사용하시면 됩니다.

      install.packages("reshape2")
      library(reshape2)
      cabbage_exp_cast <- acast(data = cabbage_exp
      , Cultivar ~ Date
      , value.var = 'Weight'
      , fun.aggregate = mean
      #, fill = 0 # if you want to fill the missing value with '0'
      , drop = TRUE)

    • 초코초코 2019.11.17 16:52  수정/삭제

      친절한 답변 정말 감사드립니다 선생님!
      Rstudio는 정말 어렵네요...대단하십니다.
      그런데 혹시
      spread(cabbage_exp, Date, Weight) %>%
      select(Cultivar, d16, d20, d21)
      이런 코드를 사용했더니
      Cultivar d16 d20 d21
      1 c39 NA 2.80 NA
      2 c39 3.18 NA NA
      3 c39 NA NA 2.74
      4 c52 NA NA 1.47
      5 c52 2.26 NA NA
      6 c52 NA 3.11 NA

      이런식으로 나오는데 위에 말씀드린 테이블을 만들기 위해 어떤 dplyr 패키지를 추가적으로 사용해야 되는 지 여쭤봐도 될까요? 대단히 감사합니다.

    • R Friend R_Friend 2019.11.17 18:05 신고  수정/삭제

      안녕하세요 초코초코님,

      아래 코드 참고하세요.

      https://rfriend.tistory.com/80

      # load data
      library(gcookbook)
      data(cabbage_exp)
      cabbage_exp

      # reshape data using tidyverse
      library(tidyverse)

      # melt first (long format)
      cabbage_exp_melt <- cabbage_exp %>%
      group_by(Cultivar, Date) %>%
      summarise(Weight = mean(Weight))

      # cast second (wide format)
      cabbage_exp_cast <- spread(cabbage_exp_melt, key = c("Date"), value = "Weight", fill = 0)

      print(cabbage_exp_cast)
      Cultivar d16 d20 d21
      <fct> <dbl> <dbl> <dbl>
      1 c39 3.18 2.8 2.74
      2 c52 2.26 3.11 1.47

    • 초코초코 2019.11.18 12:32  수정/삭제

      친절하고 자세한 답변 정말 감사드립니다! 오늘도 좋은 하루 되시길 바라겠습니다.

  6. 꾸리꾸리 2019.11.15 09:49  수정/삭제  댓글쓰기

    안녕하세요. 시각화와 관련하여 질문을 드리려 합니다.
    길게 설명하는 것보다 참고 사이트 주소를 올립니다.
    https://www.researchgate.net/figure/The-annotation-results-of-R-sativus-transcriptome-GO-Gene-Ontology-annotation-results_fig3_258831037

    제 데이터 구성또한 참고 사이트에 나온것처럼 CC(cellular), MF(molecular function), BP(biological process) <- x축
    에 대해서 4~5천여 행이 나열되어 있습니다.

    혹시 관련할만한 게시물이나 방법이 있으시면 말씀해주시면 감사하겠습니다.

    • R Friend R_Friend 2019.11.15 09:57 신고  수정/삭제

      안녕하세요.

      제가 업무시간 중에는 시간을 낼 수가 없어서요, 퇴근 후에 한번 살펴보고 의견드릴께요

    • 꾸리꾸리 2019.11.15 10:03  수정/삭제

      네 감사합니다. 시간 내주셔서 감사합니다.

    • R Friend R_Friend 2019.11.17 12:20 신고  수정/삭제

      안녕하세요 꾸리꾸리님,

      문의하신 내용과 정확히 일치하지는 않습니다만, "클리브랜드 점 그래프(Cleveland dot plot)" 을 이용하면 예시로 남겨주신 사이트의 결과물과 유사한 그래프를 얻을 수 있을 것 같습니다.

      ggplot2의 geom_point() 함수를 사용하면 Cleveland dot plot을 그릴 수 있으면, 샘플데이터와 코드는 아래 링크 참고하시기 바랍니다.

      https://rfriend.tistory.com/75

    • 꾸리꾸리 2019.11.17 14:52  수정/삭제

      답변 감사드립니다. 추가로 질문좀 남기겠습니다. 데이터 cars93을 예시로 들면
      Cars93_P <- subset(Cars93, select = c(Model, Type, Min.Price, Max.Price)
      1. 데이터내에서 원하는 열을 추출한 결과, 4개의 각 4개의 열이 동일하게 100개의 행으로 이루어져 있는 데이터
      2. 추출한 열을 기준으로 각각의 행에서 서로 중복이 되는 문자가 있다고 한다면, ( ex, "=")
      Cars93_P <-Cars93_P[rowSums(Cars93_P == "=")<= 2,] 으로 1차 필터 후,
      3. 다시 데이터의 각 4개의 열을 기준으로, 행을 ";" 세미콜론을 기준으로 분리하여 100행을 100+a로 구성.
      ex) Model열에 1행은 사과 / Model열의 2행은 배;오렌지 / Model열의 3행은 배;귤 -> 1행 사과 / 2행 배 / 3행 오렌지 / 4행 배 / 5행 귤 (이런식으로)
      4. 각 열마다 ';'이 처음부터 몰랐기 때문에 3번 까지 진행하게 되면 4개의 열의 행의 숫자가 다릅니다.
      만약, 서로 다른 행의 개수를 하나의 데이터프레임 형식으로 만들 수 있는 방법이 있을까요?

    • R Friend R_Friend 2019.11.17 16:12 신고  수정/삭제

      안녕하세요 꾸리꾸리님,

      "서로 다른 행의 개수를 하나의 데이터프레임 형식으로 만들 수 있는 방법"을 문의하셨는데요, 데이터프레임의 각 열(column)의 길이, 포맷이 같다면 rbind() 를 이용해서 합치면 될텐데요...

      질문을 읽다보니 행(row)과 열(column)이 좀 헷갈리네요. (행이 다른게 아니라 열이 다른 것때문에 질문하신게 아닌가 싶기도 해서요)

      문자열의 구분자를 기준으로 분할(split)해서 do.call 함수로 rbind() 를 호출해서 dataframe으로 결과는 만드는 샘플 코드가 아래 링크에 있는데 참조하시기 바랍니다. 방명록에 질문 남겨주신 것과 정확하게 일치하지 않는 요건일 수 있는데요, do.call 사용법 참고하시면 도움이 될 수 도 있을것 같아서 링크남깁니다.
      https://rfriend.tistory.com/37

  7. 김종석 2019.11.04 22:38  수정/삭제  댓글쓰기

    답변 주셔서 너무 감사드립니다!

    좋은 블로그를 알게된 것 같아서 너무 기분이 좋네요.

    말씀해주신대로 공부해보도록 하겠습니다!

  8. 김종석 2019.11.04 22:22  수정/삭제  댓글쓰기

    안녕하세요?

    저는 컴퓨터 관련해서 공부를 해보지도 않았고 평범한 직장을 다니고 있습니다.

    제가 앞으로 일을 하는데 있어 데이터 분석이 필요할 것 같아 서칭을 해보던 중 R을 이용한 데이터 분석이 좋을 것 같다 라는 판단 하에 시중에 있는 책을 참고하면서 Rstudio 프로그램을 사용해 차근차근 공부해 나가고 있습니다.

    혹시 저와 같이 처음 r을 시작하는 사람들이 참고할만한 책, 강의 등을 추천해주신다면 어떤 것들이 있는지 궁금합니다.

    현재 저는 이지스퍼블리싱에서 출간된 DOIT 쉽게 배우는 R 데이터 분석이라는 책을 통해서 공부하고 있습니다.

    답변 주시면 감사드리겠습니다!

    • R Friend R_Friend 2019.11.04 22:33 신고  수정/삭제

      안녕하세요 김종석님,

      R 분석을 시작하셨다니 반갑습니다.
      처음 시작하시는거고 이미 책을 한권 구입하셨다면 두세번 정도 실습을 하시면서 반복하시면 좋겠습니다. 그리고 실제 업무에 적용하려고 노력하시다 보면 무엇을 더 공부해야할지 자연스럽게 필요한 것들이 보일거 같습니다. 앤드류능 교수의 코세라 강의 추천합니다.

  9. lighth 2019.10.28 10:14  수정/삭제  댓글쓰기

    답변 감사드립니다. 하나 또 궁금한게 생겼는데
    df
    이름 과일
    1 영수 사과, 사과, 바나나, 바나나
    2 미애 포도, 포도, 사과

    이런 식으로 과일명이 중첩되어 df$과일에
    들어있을 시 중복값을 한번만 나오게 할 수 있을까요?
    gsub 통해서 제거해보려고도 하고
    다른 방법도 시도했는데 원하는 결과로 나오지 않아서
    질문 드립니다.

    • R Friend R_Friend 2019.10.28 10:37 신고  수정/삭제

      안녕하세요, lighth님.

      unique로 중복제거 해주시면 됩니다. 아래 for loop 반복문의 4번째 줄 코드에 unique() 추가해보세요.

      for (i in 1:length(name_set)){
      df_i <- df[df$name == name_set[i], ]
      df_name_item_reshaped[i, 'name'] = name_set[i]
      df_name_item_reshaped[i, 'item'] = paste(unique(as.character(df_i$item)8, collapse=" ") # <--- add unique() here
      }

  10. Lighth 2019.10.26 16:14  수정/삭제  댓글쓰기

    https://rfriend.tistory.com/m/238
    에 있는 변환 보고 질문 드리는데 혹시
    반대일 경우도 가능 할까요??

    • R Friend R_Friend 2019.10.26 16:42 신고  수정/삭제

      안녕하세요 Lighth 님,

      아래 코드 참고하시기 바랍니다.

      > name <- c(rep('john', 3), rep('jane', 4), rep('tom', 5))
      > item <- c('apple', 'banana', 'mango', 'banana', 'kiwi', 'tomato', 'manggo', 'apple', 'tomato', 'cherry', 'milk', 'icecream')
      >
      > df <- data.frame(name, item)
      > df
      name item
      1 john apple
      2 john banana
      3 john mango
      4 jane banana
      5 jane kiwi
      6 jane tomato
      7 jane manggo
      8 tom apple
      9 tom tomato
      10 tom cherry
      11 tom milk
      12 tom icecream
      >
      > df_name_item_reshaped <- data.frame()
      > name_set <- as.character(unique(df$name))
      >
      > for (i in 1:length(name_set)){
      + df_i <- df[df$name == name_set[i], ]
      + df_name_item_reshaped[i, 'name'] = name_set[i]
      + df_name_item_reshaped[i, 'item'] = paste(as.character(df_i$item), collapse=" ")
      + }
      >
      > df_name_item_reshaped
      name item
      1 john apple banana mango
      2 jane banana kiwi tomato manggo
      3 tom apple tomato cherry milk icecream