반응형

     정보

    • 업무명     : R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 (4) : 2020년 06월 07일

    • 작성자     : 이상호

    • 작성일     : 2020-06-07

    • 설   명      :

    • 수정이력 :

     

     내용

    [특징]

    • 네이버 지식iN에서 R 프로그래밍 관련 답변을 위해서 체계적인 소스 코드 현행화가 요구되며 이 프로그램은 이러한 목적을 달성하기 위한 소프트웨어

    • 추가로 2020년 02월 21일, 03월 30, 04월 30일에 대한 현행화 버전을 알려드리오니 참고하시기 바랍니다.

     

     

    [지식iN] R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 : 2020년 02월 21일

     정보 업무명  : R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 작성자  : 이상호 작성일  : 2020-02-21 설  명 : 수정이력 :  내용 [특징] 네이버 지식iN에서 R 프로그래밍 관련 답변을 위해

    shlee1990.tistory.com

     

     

    [지식iN] R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 (2) : 2020년 03월 30일

     정보 업무명  : R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 (2) 작성자  : 이상호 작성일  : 2020-03-30 설  명 : 수정이력 :  내용 [특징] 네이버 지식iN에서 R 프로그래밍 관련 답변을 ��

    shlee1990.tistory.com

     

     

    [지식iN] R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 (3) : 2020년 04월 30일

     정보 업무명  : R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 (3) 작성자  : 이상호 작성일  : 2020-04-30 설  명 : 수정이력 :  내용 [특징] 네이버 지식iN에서 R 프로그래밍 관련 답변을 ��

    shlee1990.tistory.com

     

     

    [기능]

    • R 프로그램 관련 "질문&답변 (Q&A)" 소개

    • "#"를 기준으로 질문에 대한 답변 및 "소스 코드" 첨부

       

    [활용 자료]

    • 질문자가 제공하신 입력 자료 (.sav, .xlsx, .txt, .csv)

     

    [자료 처리 방안 및 활용 분석 기법]

    • 없음

     

    [사용법]

    • 소스 코드 참조

     

    [사용 OS]

    • Windows 10

     

    [사용 언어]

    • R v4.4.0

    • R Studio v1.2.5042

     

     소스 코드

    [네이버 지식iN]

    • "질문&답변 (Q&A)" 소개

     

    [전체]

    • "#"을 기준으로 질문에 대한 답변 및 "소스 코드" 첨부

    • 2020년 06월 07일 업로드

    # 1.다음의 문제를 해결하기 위한 R코드를 작성하시오
    # 10!을 출력하시오.(단,factorial() 함수를 이용하지 않는다.)
    
    sum = 1
    for (i in 1:10) {
        sum = sum * i
    }
    
    sum
    
    # 2.for문을 이용하여 구구단 2단에서 9단까지 출력하는 R코드를 작성하시오.
    
    for (i in 2:9) {
        for (j in 1:9) {
            cat(i, " * ", j, " = ", i * j, "\n")
        }
    }
    
    
    # 3. 1~100의 정수를 차례로 출력하되 3의 배수에서는 숫자 대신 '*'을 출력하는 R코드를 작성하시오(출력은 가로방향으로 한다.)
    
    for (i in 1:100) {
        
        val = ifelse((i %% 3 == 0), "*", i)
    
        cat(paste0(val, " "))
    }
    
    # 그래프에 수식으로 된 텍스트를 추가하려고 하는데 계속 에러가 뜹니다ㅠㅠ
    # 뭐가 문제인 지 모르겠어요
    # 루트2파이 분의 1이라는 수식을 해당 위치에 추가하고 싶은데 계속 에러가 떠요ㅠ 뭐가 문제일까요?
        
    # text(1.5,0.35,expression_(frac(1,sqrt(2*pi)))
             
    plot(1:10, 1:10)
    text(1.5, 5.35, expression(frac(1, sqrt(2 * pi))))
    
    # 
    # 안녕하십니까? 블로그에서 R 프로그래밍에 대해 많은 참조를 하고 있습니다.
    # 저는 R을 이용한 통계학을 공부하고 있는 대학원생입니다.
    # 표본크기를 2부터 50까지 변화시켜 가며 각 n마다 100개의 표본을 취하여 표본평균을 계산한 것을 시각화해야 하는데, 아무리 생각해도 잘 되지가 않아 메일을 보냅니다.
    # 반복문 안에 코드를 완성해야 하는데 조언을 부탁드려도 되겠습니까?      
    
    ######################################## 모집단 및 표본집단의 평균/분산/표준편차 비교 ##############################
    ##  - 중심극한정리 : 동일한 확률분포를 가진 독립확률 변수 n개의 평균값은 n이 클수록 정규분포에 가까워짐
    ##  - 표본집단을 통하여 모집단의 정보를 알고싶음
    ##  - 즉 표본평균집단의 평균/분산/표준편차를 이용하여 모집단의 평균/분산/표준편차를 유추할 수 있음
    ##    -- 모집단의 평균                  = 표본평균집단의 평균
    ##    -- 모집단의 분산/자료수           = 표본평균집단의 분산                  
    ##    -- 모집단의 표준편차/루트(자료수) = 표본평균집단의 표준편차
    ##  -> 표본 개수가 많을수록 모집단을 더 잘 유추할 수 있음  -> 정규분포에 가까워짐
    ####################################################################################################################
    
    set.seed(1)                   # 난수로 생성된 수열을 고정시킴
    X = runif(10000, min = 0, max = 1)  # 난수 생성 (모집단 생성)
    
    hist(X)  # 모집단의 빈도분포 
    cat(mean(X), var(X), sd(X), "\n")  # 모집단의 평균/분산/표준편차
    
    
    ################################################### 표본평균집단에 대해서 ###########################################################
    
    
    # for (i in c(10, 50, 100, 250)) {
    for (i in seq(2, 50, 2)) {
        
        DO = 100000    # Number of repetition
        N = i          # Number of sample
        # N = 30       
    
            ## 비복원 추출(무작위 정렬) : 한번 뽑은 것을 다시 뽑을 수 없는 추출
        Sort = lapply(1:DO, function(i) sample(X, N, replace = FALSE))  
        Sort_mean = mapply(mean, Sort)
        
        # FIG
        hist(Sort_mean, breaks = 50, xlab="Sample Distribution Mean", xlim=c(0.3, 0.7), col = "light grey", border = "grey", xaxs="i", yaxs="i",
             main=paste0("Central Limit Theorem : number of sample = ", N, ", number of repetition = ", sprintf("%d", DO)))
        
        XX1 = mean(Sort_mean)+sd(Sort_mean)
        XX2 = mean(Sort_mean)-sd(Sort_mean)
        XX3 = mean(Sort_mean)+2*sd(Sort_mean)
        XX4 = mean(Sort_mean)-2*sd(Sort_mean)
        XX5 = mean(Sort_mean)+3*sd(Sort_mean)
        XX6 = mean(Sort_mean)-3*sd(Sort_mean)
    
        YY = max(hist(Sort_mean, breaks=50, plot=F)$counts)
        lines( c(mean(Sort_mean), mean(Sort_mean)), c(0, YY), lty=1, col=4) ; text(mean(Sort_mean), YY/2, "Mean")
        lines( c(XX1, XX1), c(0, YY), lty=1, col=2 ) ; text( XX1, YY/2, "+1σ")
        lines( c(XX2, XX2), c(0, YY), lty=1, col=2 ) ; text( XX2, YY/2, "-1σ")
        lines( c(XX3, XX3), c(0, YY), lty=1, col=2 ) ; text( XX3, YY/2, "+2σ")
        lines( c(XX4, XX4), c(0, YY), lty=1, col=2 ) ; text( XX4, YY/2, "-2σ")
        lines( c(XX5, XX5), c(0, YY), lty=1, col=2 ) ; text( XX5, YY/2, "+3σ")
        lines( c(XX6, XX6), c(0, YY), lty=1, col=2 ) ; text( XX6, YY/2, "-3σ")
        lines( c(max(Sort_mean), max(Sort_mean)), c(0, YY), lty=1, col=3 ) ; text(max(Sort_mean), YY/2, "Max")
        lines( c(min(Sort_mean), min(Sort_mean)), c(0, YY), lty=1, col=3 ) ; text(min(Sort_mean), YY/2, "Min")
        
        # 0.1초 지연
        Sys.sleep(0.1)
    }
    
    # 제가 가지고 있는 데이터셋 내에 있는 변수 (날짜와 시간) 에서 년도만 추출하여 새로운 변수를 만들어야 합니다.
    # 전에 지식인에서 답변주신 분이 알려주신대로 strsplit을 아래와 같이 사용했는데요 (hubway_trips_small이 데이터파일이름이고, start_date가 날짜 및 시간으로 되어있는 변수이름입니다)
    # 이렇게 하면 year라는 새 변수에 각 년도가 나와야하는데, 아래와 같이 2013년도로만 쭉 나옵니다. 위 코드에서 a와 b라는 새 변수를 만드는 것까지는 잘 된 것 같은데 c부터 한가지로 통일되더니 year에서도 2013년도로 통일되었습니다.
    # a와 b까지 잘 된 것 처럼 c에서 그리고 마지막에 year까지 기존 변수의 값들을 유지해서 새 변수를 어떻게 만들 수 있을까요? 고수님들 제발 도와주세요...
    # 그리고 저 year변수의 값이 2013 하나인채로, 아래와 같이 모델을 돌렸더니 이런 에러가 뜨는데, 저 변수 내 값이 2013이라는 값 하나뿐이라서 뜨는 에러일까요? year변수를 제대로 잘 만들고 돌리면 괜찮을까요?
    
    library(dplyr)
    library(lubridate)
    
    dfData = data.frame(
      sDateTime = c("4/13/2013 13:05:00", "5/23/2013 16:24:00", "5/1/2013 15:15:00")
    )
    
    dfDataL1 = dfData %>%
      dplyr::mutate(
        dtDateTime = lubridate::parse_date_time2(sDateTime, orders = "%m/%d/%Y %H:%M:%S")
        , year = lubridate::year(dtDateTime)
        , month = lubridate::month(dtDateTime)
        , day = lubridate::day(dtDateTime)
      )
    
    dfDataL1
    
    # 이걸 구하고 싶은데 R에서 오류가 나요 ㅠㅠ 혹시 따로 설치해야하는 패키지가 있나요?
    
    HPR = function(begin.price, end.price, dividend) {
      result = (end.price-begin.price+dividend)/begin.price
      
      return(result)
    }
    prob<-c(0.3,0.4,0.2,0.1)
    begin.price<-100
    end.price<-c(126.50,110,89.75,46)
    cash.dividend<-c(4.5,4,3.5,2)
    hpr.value<-HPR(begin.price, end.price, cash.dividend)
    hpr.mean<-sum(hpr.value*prob)
    hpr.var<-sum((hpr.value-hpr.mean)^2*prob)
    df.hpr<-data.frame(hpr.value, hpr.mean, hpr.var)
    list(HPR=hpr.value, Mean=hpr.mean, Var=hpr.var)
    
    # R studio 평균구하기
    
    # summarise에서 mean할 경우 NA가 포함되어서 발생한 오류입니다.
    # 따라서 mean(공무원.주중, na.rm = TRUE)로 처리하시면 됩니다.
    
    # 안녕하세요 해솔님 저는 R스튜디오를 혼자 공부하는 학생입니다.
    # 응용문제를 다운받아서 푸는와중에  답이없는 문제를 발견했고 혼자풀지 못하여 지식인과 구글링을하던중
    # 해솔님의 친절하고 이해하기 쉬운 답변을 보게되었습니다.
    # 무례하게나마 메일로 질문을 혹시 도오ㅏ주실수있을까하여 연락드립니다.
    # 시간이되신다면 도와주실수있을까요? 죄송합니다
    
    # ※ 공공 데이터 포털www.data.go.kr은 공공 기관이 생성·취득하여 관리하는 공공 데이터를 파일·오픈 API·시각화 등 다양한 
    # 방식으로 데이터를 얻을 수 있는 통합 창구다. 이 곳에 공개되어 있는 방대 한 건강 검진 기록 데이터를 요약하는 
    # 가공을 해보자.
    # 
    # 위와 같이 [건강검진정보] 다운로드 페이지에서 전체를 선택하여 다운로드한 후 압축을 풀면 2002~2016년의 관측 데이터가 NHIS_OPEN_GJ_2002.csv, NHIS_OPEN_GJ_2003.csv,…, NHIS_OPEN_GJ_2016이라는 파일명으로 기록되어 있다. 본문의 예와 같이 여러 해에 걸친 다양 한 속성의 관측값이 별도의 파일들로 저장되어 있다. 따라서 데이터를 종합적으로 탐색하려면 각 연 도별 데이터를 읽어들여 정제하고 적절히 정리하여 통합하는 가공 과정이 필요하다.
    # 
    # 2. 연도별 데이터 파일을 읽어들여 NHIS2002 ~ NHIS2016라는 변수 이름으로 저장하라.
    
    library(tidyverse)
    library(readr)
    library(data.table)
    
    fileList = Sys.glob("INPUT/NHIS_OPEN_GJ/*")
    
    data = fileList %>%
      purrr::map(data.table::fread) %>%
      purrr::reduce(dplyr::bind_rows)
    
    dplyr::glimpse(data)
    
    # 2.데이터 파일과 함께 다운로드된 사용자 매뉴얼 파일의 내용을 참고하여 결측값을 제거하고 각 열의 데이터형을 알맞게 변환하여 정리하라.
    # : 데이터 파일에 있는 것 중 사용자 매뉴얼을 확인하시면 해당 결측치 내용이 있을 껍니다. 이에 결측치하시면 되는데. factor 함수를 이용하시면 됩니다.
    # factor를 사용하시려면 인스톨로 factor를 하셔야 합니다.
    # 성별코드, 5세이하 연령대 코드 시도코도를 확인해보세요.
    
    dataL1 = data %>%
      dplyr::mutate_at(vars(성별코드), funs(as.factor)) %>%
      dplyr::mutate_at(vars(시도코드), funs(as.factor)) %>%
      dplyr::mutate_at(vars(`연령대코드(5세단위)`), funs(as.factor))
    
    dplyr::glimpse(dataL1)
                     
    # 4. 2002년 데이터에서 성별, 시도, 연령대 순으로 요약된 통계값을 구하라.
    # : 그룹을 정해서 하셔야 하는데 기준은 연도, 성별, 시도, 연령대가 될 것이며
    # 각각의 변수들의 평균값을 구해서 통계를 구하시면 됩니다.
    
    dataL2 = dataL1 %>%
      dplyr::filter(기준년도 == "2002") %>%
      dplyr::select(-가입자일련번호) %>%
      dplyr::group_by(성별코드, 시도코드, `연령대코드(5세단위)`) %>%
      dplyr::summarise_all(list(mean = mean))
    
    dplyr::glimpse(dataL2)
    
    # 5. 2003~2016년 데이터에서 03 문제와 같은 방법으로 요약된 통계값을 구하라.
    # 전체 관측 기간에 대한 요약 통계값을 데이터 프레임 변수 하나에 병합하라.(단, 특정 해의 누락 된 검사 항목은 결측값 으로 표시한다.)
    # 문제의 요약 통계값을 데이터 프레임으로 merge 함수를 이용
    
    dataL3 = dataL1 %>%
      dplyr::filter(dplyr::between(기준년도, 2003, 2016)) %>%
      dplyr::select(-가입자일련번호) %>%
      dplyr::group_by(기준년도, 성별코드, 시도코드, `연령대코드(5세단위)`) %>%
      dplyr::summarise_all(list(mean = mean)) %>%
      # tidyr::gather(key = "key", value = "val")
      tidyr::gather(-c(1:4), key = "key", value = "val") # group_by 용도
    
    dplyr::tbl_df(dataL3)
    
    
    # 안녕하세요 해솔님
    # R 코딩을 공부하다가 궁금한게 생겨 지식인을 찾아보던중, 해솔님을 알게되어 블로그를 통해 연락드립니다
    # 제가 예제문제를 공부하던중, 잘모르겠는 부분이 있어서요
    # 코딩을 해보았긴 했는데 결과값이 잘 안나와 이렇게 죄송함을 무릅쓰고 메일 보냅니다.
    # 혹시 도움을 받을 수 있을까 해서요.
    # 괜찮으시다면 답변 부탁드리겠습니다
    # 감사합니다 ^^ 
    
    # 1. 다음표는 00회사 직장인을 대상으로 조사한 연봉(Salary)과 근무연수(Year)이다. 성별(Gender)에 따른 연봉차이가 있을 것으로 예상되어 그 차이를 보기위해 한 그래프에 그룹별로 묶어 그리려고 한다.
    
    # *1번문제 표는 맨아래 참고해주세요*
      # 1-1.  근무연수에 따른 연봉을 나타내는 산점도 그래프 (x-축 이름: Year, y-축 이름: Salary($), 메인타이틀: Salary difference in gender)
    # 1-2. 남성(M)은 초록색 실선으로 연결
    # 1-3. 여성(F)은 주황색 점선으로 연결
    # 1-4. 좌측 위에 범례 표시 (점선 중 선만 표시)
    
    library(dplyr)
    library(ggplot2)
    
    data = data.frame(
      Gender = c(1, 1, 2, 2, 2, 1, 1, 2, 2, 1)
      , Salary = c(90000, 51000, 60000, 65000, 81000, 93000, 57000, 78000, 44000, 76000)
      , Year = c(12, 5, 8, 6, 11, 10, 6, 9, 4, 9)
      )
    
    dataL1 = data %>%
      dplyr::mutate(type = case_when(
        Gender == 1 ~ "M"
        , Gender == 2 ~ "F"
        , TRUE ~ "null"
      )) 
    
    ggplot(dataL1, aes(x = Year, y = Salary, color = as.factor(Gender))) +
      geom_line(aes(linetype = as.factor(Gender))) +
      labs(title = "Salary difference in gender")
    
    # 2. 그래프를 생성하여 그룹별로 chull 함수를 이용하여 묶으시오
    # 2-1. 표준정규분포를 따르는 난수를 생성하여 matrix(100x2) 로 dot1 에 저장
    # 2-2. 구간[0,1]인 일양분포를 따르는 난수를 생성하여 matrix(50x2)로 dot2 에 저장
    # 2-3. dot1은 밀도가 15, 선 기울기 각도는 45, 보라색, 다각형으로 묶음
    # 2-4. dot2는 밀도가 30, 선 기울기 각도는 30, 금색, 다각형으로 묶음
    # 2-5. 그래프 타이틀은 "Random"
    # 2-6. 그래프와 겹치치 않게 범례 표시.
    
    # 예를들어서 상관계수가 0~1 까지 데이터로 있을 때 이를 4개로 나눠서 그려야 하는데
    # 0.25 간격으로 가시화
    
    library(tidyverse)
    library(ggplot2)
    
    data = read.csv("INPUT/full_result1.csv")
    
    dataL1 = data %>%
      tidyr::gather(-c(1:2), key = "key", value = "val") %>%
      dplyr::filter(key == "cor")
      
    ggplot(dataL1, aes(x = val)) + 
      geom_histogram(binwidth = 0.05, boundary = 0, closed = "left") +
      scale_x_continuous(breaks = seq(0, 1, 0.05))
    
    # 예를들어서 8월 1일 00시, 03시 ... 21시 이렇게 있으면 이걸 전부 묶어서 각 격자에대해서 일 최고기온을 찾아야 되고
    # 일 최고기온이 그 격자에서 25도가 넘었으면
    # 각 격자별 여름일수 구하기
    
    library(tidyverse)
    library(ggplot2)
    library(data.table)
    
    # dtDate = seq.Date(as.Date("2020-01-01"), as.Date("2020-12-31"), "1 day")
    # sDate = format(dtDate, "%Y%m%d")
    
    # 1일 목록 조회 (20170701)
    fileList = Sys.glob("INPUT/KMAPP/*201707*")
    
    data = fileList %>%
      purrr::map(data.table::fread) %>%
      purrr::reduce(dplyr::bind_rows) %>%
      dplyr::select(lon, lat, temp)
    
    dataL1 = data %>%
      dplyr::group_by(lon, lat) %>%
      dplyr::summarise(
        maxTemp = max(temp - 273.15, na.rm = TRUE)
        , number = sum(maxTemp > 25)
        )
    
    
    # 안녕하세요.
    # 
    # 해솔님 자료를 보면서 R컴퓨팅을 배우고 있는 직장인 겸 학생입니다.
    # 
    # 혼자 해결이 안되는 질문이 있어서요.
    # 
    # 제가 가지고 있는 데이터는 엑셀형식으로국가별 날짜별 질병의 발생 데이터 인데요. (지금은 csv로 변환하였습니다.)
    # (header는 날짜, 발생수, 국가)
    # 
    # 날짜가 01/01/1990 과 같은 방식으로 되어있고,
    # 발생수는 숫자
    # 국가는 국가명
    # 으로 되어있는 데이터 입니다.
    # 
    # 이 데이터를 갖고 특정 몇몇 국가의 질병발생수에 대해 시계열선그래프를 그리고 싶은데요...
    # 
    # 1) 전 세계 국가 중에서 특정 국가 데이터만 어떻게 뽑나요?
    #     2) 시계열 데이터를 만들기 위해서는 1990-01-01방식으로 바꿔야하나요?
    #     그러면, seq(as.Date)함수를 이용한 후 clind를 하면 되는 건가요??
    #     
    #     혹시 몰라서...
    # https://data.europa.eu/euodp/en/data/dataset/covid-19-coronavirus-data/resource/55e8f966-d5c8-438e-85bc-c7a5a26f4863
    # 링크를 남김니다.
    # 
    # 너무 어렵네요 ㅜㅜ
    # 해솔님 도와주시면 정말 감사하겠습니다!!
    
    # 좋은 주말 되세요
    
    
    library(dplyr)
    library(readxl)
    library(lubridate)
    library(ggplot2)
    
    # 데이터 읽기
    data = read_excel("INPUT/COVID-19-geographic-disbtribution-worldwide.xlsx")
    
    # 데이터 전처리
    dataL1 = data %>%
        dplyr::filter(countryterritoryCode %in% c("KOR", "JPN", "CHN", "USA")) %>%
        dplyr::mutate(dtDate = as.Date(lubridate::parse_date_time2(as.character(dateRep), "%d/%m/%Y"))) %>%
        dplyr::arrange(dtDate)
    
    # 가시화
    ggplot(dataL1, aes(x = dtDate, y = deaths)) +
        geom_point() + 
        scale_x_date(date_labels = "%Y-%m-%d") +
        facet_wrap(~ countryterritoryCode) 
    
    # R프로그래밍 Plotly 패키지에 대한 설명을 알려주세요.
    # 패키지 설명 , 구성 , 예시 등등 설명부탁드립니다.
    
    # plotly 라는 인터랙티브 charts를 만드는 패키지입니다.
    # 또한 시각화 콘텐츠에 접근할 수있는 패키지로서 오픈 소스입니다.
    
    library(plotly)
    
    plot_ly(iris, x = ~Sepal.Length, y = ~Sepal.Width, color = ~Species, type = "scatter")
    
    # 시간_r이라는 함수의 형태인데요 여기서 0부터 23시까지의 시간 각각의 횟수를 더해 열이 시간과 총 횟수 두 개인 데이터 프레임을 만들고 싶은데 어떻게 하면 되나요?
    
    library(dplyr)
    
    data = data.frame(
      time = c(1, 2, 3)
      , count1 = c(35550, 33881, 38919)
      , count2 = c(27888, 27338, 31956)
      , count3 = c(20191, 20564, 22811)
      )
    
    data %>%
      dplyr::group_by(time) %>%
      dplyr::summarise_all(
        funs(sum(., na.rm = TRUE)
             , n())
        )
    
    
    # 네이버 뉴스 속보
    
    library(rvest)
    library(stringr)
    library(tidyverse)
    library(dplyr)
    library(magrittr)
    
    Sys.setlocale("LC_ALL", "English")
    options(encoding = "UTF-8")
    Sys.setenv(LANG = "en_US.UTF-8")
    
    url = "https://news.naver.com/main/list.nhn?mode=LSD&mid=sec&sid1=001&date=20200523&page=222"
    
    getUrlText = function(url, xpath) {
      xml2::read_html(url) %>%
        rvest::html_nodes(xpath = paste0(xpath)) %>%
        rvest::html_text() %>%
        str_replace_all(pattern = "\n", replacement = " ") %>%
        str_replace_all(pattern = "[\\^]", replacement = " ") %>%
        str_replace_all(pattern = "\"", replacement = " ") %>%
        str_replace_all(pattern = "\\s+", replacement = " ") %>%
        str_trim(side = "both")
    }
    
    getUrlHref = function(url, xpath) {
      xml2::read_html(url) %>%
        rvest::html_nodes(xpath = paste0(xpath)) %>%
        rvest::html_attr("href") 
    }
    
    url = c("https://news.naver.com/main/list.nhn?mode=LSD&mid=sec&sid1=001&date=20200523&page=222")
    
    
    getUrlText(url, '//*[@id="main_content"]/div[2]/ul[*]/li[*]/dl/dt[2]/a')
    # getUrlHref(url, '//*[@id="main_content"]/div[2]/ul[*]/li[*]/dl/dt[2]/a')
    
    
    url = sprintf("https://news.naver.com/main/list.nhn?mode=LSD&mid=sec&sid1=001&date=20200523&page=%d", seq(1:100))
    
    data = url %>%
      purrr::map(~ getUrlText(.x, '//*[@id="main_content"]/div[2]/ul[*]/li[*]/dl/dt[2]/a')) %>%
      unlist() %>%
      as.data.frame()
    
    
    # 
    
    rep(c(2, 4, 2), each = 3)
    
    rowVal = c(2, 3, 4, 3, 2, 1)
    repVal = c(5, 3, 1, 1, 3, 5)
    
    j = 0
    
    
    i = 0
    while (i < length(rowVal)) {
        j = 1
        repeat {
            
            cat(rep(rowVal[i], repVal[j]), "\n")
            
            j = j +1 
            
            if (j > rowVal[j]) {
                break
            }
         
        }
        
        
        i = i + 1
    }
    
    # 
    # 안녕하세요 얼마전 R 공부를 시작한 학생입니다
    # 조금 막히는 부분이 있어서 질문드립니다.
    
    # str()로 데이터를 확인했을 때
    
    # job int 1 2 1 4 16 1 ...
    
    # 대략 이런식으로 나왔습니다
    # 직업이 숫자일리는 없으니 factor형처럼 보이는데 다른 설명이 없어서요
    
    # 1이면 의사 2면 경찰 이런식으로 데이터를 제공하는 사람이 주석을 달아주지 않으면 해석이 불가능한 데이터인가요?
    # 아니면 혹시 다른 방법이 있는지..
    
    # 설명을 잘 못해서 어처구니 없는 질문이라고 생각하실 수도 있지만 의견 부탁드립니다 ㅠㅠㅠ
    
    library(dplyr)
    library(plyr)
    
    # 일반적으로 의사, 경찰와 같은 문자형으로 변수를 할당할 경우 숫자형/Factor형에 비해 큰 용량을 차지합니다.
    # 따라서 숫자형/Factor형으로 나타되면 코드 정보가 꼭 필요합니다.
    # 1 : 의사
    # 2 : 경찰
    
    data = data.frame(
      job = c(1, 2, 1, 4)
      )
    
    # 코드 정보 매핑
    data %>%
      dplyr::mutate(
        name = case_when(
          job == 1 ~ "의사"
          , job == 2 ~ "경찰"
          , job == 4 ~ "교사"
          , TRUE ~ "null"
          )
      )
    
    
    # Factor형으로 매핑
    factor = as.factor(data$job)
    
    result = plyr::mapvalues(factor, from = c(1, 2, 1, 4), to = c("의사", "경찰", "교사"))
    
    result
    
    # 정답은 4번인데 이해가 안가는데 해설좀 부탁드립니다..
    # 1 2
    # 1 1 4
    # 2 2 5
    # 3 3 6
    # 첫째줄 나타내면 위의 매트릭스 형태로 만들어지고
    
    # 둘째줄은 m[2,3&6] 으로 나오는데 왜 4번이죠..ㅜㅜ
    
    m = matrix(1:6, nrow = 3)
    m[m[, 1] > 1 & m[ , 2] > 5, ]
    
    # m[, 1] > 1의 경우 1보다 큰 수 (즉 2, 3행)
    # m[ , 2] > 5의 경우 5보다 큰 수 (3행)
    # 이러한 2 조건의 만족하는 것은 3행입니다.
    
    # 사진의 결과들이  if문으로 해도 나올 수 있게 바꿔야하는데
    # 어떻게 하는지 모르겠어요ㅜㅜㅜ
    # 저는 계속 오류 아님 경고가 나더라고요ㅜㅜㅜ
    
    iris[iris$Species == "setosa", ]
    iris[iris$Sepal.Length > 7.5, ]
    iris[iris$Sepal.Length > 5.1 & iris$Sepal.Width > 3.9, ]
    iris[iris$Sepal.Length > 7.5, ]
    iris[iris$Sepal.Length > 7.6, c(3, 4)]
    
    # 제가 질문한거는 올려주신 결과가
    # if문으로 어떻게 입력해야 되는거에요? 였어요ㅜㅜㅜ
    
    for (i in 1:nrow(iris)) {
      
      rowData = iris[i, ]
      
      if (rowData$Species == "setosa") print(rowData)
    }
    
    for (i in 1:nrow(iris)) {
      
      rowData = iris[i, ]
      
      if (rowData$Sepal.Length > 7.5) print(rowData)
    }
    
    for (i in 1:nrow(iris)) {
      
      rowData = iris[i, ]
      
      if (rowData$Sepal.Length > 5.1 & rowData$Sepal.Width > 3.9) print(rowData)
      
    }
    
    for (i in 1:nrow(iris)) {
      
      rowData = iris[i, ]
      
      if (rowData$Sepal.Length > 7.5) print(rowData)
      
    }
    
    for (i in 1:nrow(iris)) {
      
      rowData = iris[i, ]
      
      if (rowData$Sepal.Length > 7.6) print(rowData[, c(3, 4)])
      
    }
    
    
    
    
    # R언어 평균, 중앙값, 표본분산, 표본표준편차, 변동계수 구해주세요
    data = c(54, 57, 55, 23, 51, 64, 90, 51, 52, 45, 15, 10, 82)
    
    # 평균
    mean(data, na.rm = TRUE)
    
    # 중앙값
    median(data, na.rm = TRUE)
    
    # 표본분산
    var(data, na.rm = TRUE)
    
    # 표본표준편차
    sd(data, na.rm = TRUE)
    
    # 변동계수
    sd(data, na.rm = TRUE) / mean(data, na.rm = TRUE)
    
    # 소수점이였던 변수값들이 ts 적용해서 gdp.time확인하니깐.. 
    # 다 무슨 30이상의 이상한 숫자가 되었습니다.
    # 데이터가 안 읽혀서 as.factor로 변경해서 읽혔더니 gdp 까지는 잘 읽었는데 ts적용한 이후부터 값이 멋대로 바뀌었습니다.. 
    # 고수님들 도와주세요..
    
    # ts함수 이용해서 시계열을 그리려고 합니다.
    
    data = read.csv("INPUT/gdpq.csv", header = TRUE)
    
    gdpData = ts(data, start = 1982, frequency = 4)
    
    plot(gdpData[, 1]/1000, ylab = "GDP(조원)", xlab = "연도")
    
    lines(gdpData[, 2]/1000, col = "red")
    
    
    # R Studio 에서 주식 데이타 정리
    # 안녕하세요. 
    # 우선 아래의 코드를 통해서 주식 데이타를 가져왔습니다. 
    
    # 위 코드로 데이타를 받으면 
    
    # Open  High  Low Close Volume AdjClose  이 순서대로 각각의 회사의 데이타를 가져올 수 있습니다. 
    # 제가 원하는건 Open, High, Low.... 각각의 데이타를 한곳으로 몰고 싶습니다;
    
    # Open (ABG) Open(ACH)...Open(X)    High(ABG) High(ACH)...High(X)  .....그 외의 것들도 마찬가지로요. 
    
    # 간단히 복사하는 코드를 쓸 수도 있을거 같은데 도움 주시면 감사하겠습니다. 
    참고로
    
    # Low_Raw <- NULL
    # for(ticker in tickers)
    #   Low_Raw <- cbind(Low_Raw, getSymbols(ticker, from = mdate, to = edate, auto.assign = F)[,1])
    # 
    # 이렇게는 오류가 나는 부분이 많아서 못 쓸거 같습니다. 
    
    library(quantmod)
    library(timetk)
    library(dplyr)
    library(magrittr)
    
    mdate <- "2016-01-04"
    edate <- "2016-03-09"
    tickers <- c("ABG","ACH","ADM","AEG","AEM") # 실제는 2000개가 넘는 회사를 다운받습니다. 
    
    colName = c("Open", "High", "Low", "Close", "Volume", "Adjusted")
    
    High_Raw = data.frame()
    
    for (ticker in tickers) {
      
      tmpData = getSymbols(ticker, from = mdate, to = edate, auto.assign = F) %>% 
        as.data.frame() %>%
        magrittr::set_names(x = ., value = colName)
      
      High_Raw = dplyr::bind_rows(High_Raw, tmpData)
    }
      
    dplyr::tbl_df(High_Raw)
    
    
    # library(mlbench)
    # data(PimaIndiansDiabetes)
    # set.seed(100)을 실행한 후 전체 데이터(관측값)에서 임의로 60%를 추출하여 
    # train에 저장하고 나머지 40%는 test에 저장하라고 나와있는데 찾아보니깐 
    # sample을 하라고 까지는 찾았는데 어떻게 추출해서 변수에 담을수 있는건지를 모르겠어요 
    # 해결법좀 알려주세요
    
    library(mlbench)
    
    data(PimaIndiansDiabetes)
    
    set.seed(100)
    
    data = PimaIndiansDiabetes
    size = as.integer(nrow(data) * 0.6)
    
    ind = sample(1:nrow(data), size)
    
    trainDF = data[ind, ]
    testDF = data[-ind, ]
    
    # 자꾸 이렇게 뜨는데 실행시킬 방법이 없을까요?
    # 이유라도 알려주시면 감사하겠습니다.
    
    library(dplyr)
    
    data = data.frame(
      만나이 = as.factor(c(10, 20, 30, 40, 50, 60, 70, 80, 100))
      )
    
    data %>%
      dplyr::filter(as.character(만나이) >= 13)
    
    # Rstudio에서 한글로 작성된 메모장 파일을 readLines("메모.txt")로 불러왔는데 글씨가 다 깨져있네요 ㅠㅠ
    # 영어로 해서 저장하면 잘 불러와지는데 한글로 하면 깨져요... 어떻게 해야하나요 ㅠㅠㅠㅠ
    readLines(file("INPUT/Memo.txt", encoding = "utf-8"))
    readLines(file("INPUT/Memo.txt", encoding = "cp949"))
    readLines(file("INPUT/Memo.txt", encoding = "euc-kr"))
    
    
    # 문제가 이건데 각 대륙의gdpPercap의 평균을 구하려면 어떻게 해야하나요?
    # 1. gapminder 데이터에서 각 대륙의 gdpPercap의 평균값을 plotting하고 범례를 추가하시오.
    
    library(gapminder)
    library(dplyr)
    library(ggplot2)
    
    data = gapminder %>%
      dplyr::group_by(continent) %>%
      dplyr::summarise(meanGdp = mean(gdpPercap, na.rm = TRUE))
    
    ggplot(data, aes(x = continent, y = meanGdp, colour = continent)) +
      geom_point(size = 5)
      
    
    # 2. gapminder 데이터에서 1952년의 gdpPercap과 lifeExp의 대륙별 평균을 추출한 후, 가로축에는 gdpPercap, 세로축에는 lifeExp를 나타낸 그래프로 ggplot2를 사용하여 시각화 하라.
    
    dataL1 = gapminder %>%
      dplyr::filter(year == 1952) %>%
      dplyr::group_by(continent) %>%
      dplyr::summarise(
        meanGdp = mean(gdpPercap, na.rm = TRUE)
        , meanLife = mean(lifeExp, na.rm = TRUE)
        )
    
    ggplot(dataL1, aes(x = meanGdp, y = meanLife, colour = continent)) +
      geom_point(size = 5)
    
    # 보기도 어떻게 너오는지 알려주세요 내공겁니다
    A = cbind(c(1, 2, 3), c(4, 5, 6), c(7, 8, 9))
    colnames(A) = c("A", "B", "C")
    rownames(A) = c("r1", "r2", "r3")
    
    A[ ,"A"]
    A[-c(2,3), ]
    A[ ,1]
    A[ ,-(2:3)]
    
    # 피어슨 상관계수를 계산하는 함수를 완성하시오.
    # 함수명 : person_r
    # 함수 파라미터 : x 벡터, y 벡터
    
    pearson_r <- function(x, y) {
      cor(x, y, method = "pearson")
    }
    
    x = mtcars$mpg
    y = mtcars$disp
    
    pearson_r(x, y)
    
    pp = read.csv(file = "INPUT/pu.csv")
    pp
    
    # **첨부한 csv파일을 활용하였습니다.
    
    # class(pp)
    # str(pp)
    # pp$"총인구" <- as.integer( pp$"총인구")
    # str(mct)
    #인구수가 110만이상인 도시 추출
    ct <- pp %>%
      filter( 총인구 > 1100000 )
    # 광역시만 추출
    mct<- ct[c(1,2,4,6,8,9,10) , ]
    mct
    pp <- mct$"총인구"
    pp
    pc <- mct$"행정구역별"
    pc
    df <- data.frame( pp, pc)
    df
    
    # 아래와 같이 표를 그려봤습니다, 근데 왼쪽에 있는 y축값이 저렇게 뜨는데 어떻게 바꿀수있나요?
    
    library(scales)
    
    ggplot( df, aes( x = pc, y = pp) ) +
      geom_bar( stat = "identity",      # 막대 높이, y축값
                width = 0.5,            # 막대 폭
                fill = "darkred") +
      scale_y_continuous(breaks = seq(0, 10000000, 2500000), labels = scales::comma_format(big.mark = ',', decimal.mark = '.')) +
      ggtitle("행정구역별 총인구수")+
      theme(plot.title = element_text(size = 25,
                                      face = "bold",
                                      colour = "darkred"))+
      labs(x = "행정구역별", y= "총인구수") 
    
    # R프로그램에서 웹사이트 크롤링 할때 1월달만 나오지 않고 1~12월까지 나오게 하려면 코드를 어떻게 수정해야 하나요ㅠㅠ
    # 알라딘 베스트셀러 2019년 1월 12월 1-200위 크롤링
    
    library(rvest)
    library(stringr)
    library(tidyverse)
    library(dplyr)
    library(magrittr)
    
    Sys.setlocale("LC_ALL", "English")
    options(encoding = "UTF-8")
    Sys.setenv(LANG = "en_US.UTF-8")
    
    getUrlText = function(url, css) {
      xml2::read_html(url) %>%
        rvest::html_nodes(css = paste0(css)) %>%
        # rvest::html_nodes(xpath = paste0(xpath)) %>%
        rvest::html_text() %>%
        str_replace_all(pattern = "\n", replacement = " ") %>%
        str_replace_all(pattern = "[\\^]", replacement = " ") %>%
        str_replace_all(pattern = "\"", replacement = " ") %>%
        str_replace_all(pattern = "\\s+", replacement = " ") %>%
        str_trim(side = "both")
    }
    
    dtDateList = seq.Date(as.Date("2019-01-01"), as.Date("2019-12-31"), "1 month")
    
    data = data.frame()
    
    for (i in 1:length(dtDateList)) {
      
      sYear = format(dtDateList[i], "%Y")
      sMonth = format(dtDateList[i], "%m")
      
      urlList = sprintf("https://www.aladin.co.kr/shop/common/wbest.aspx?BestType=Bestseller&BranchType=1&CID=0&Year=%s&Month=%s&Week=5&page=%d&cnt=1000&SortOrder=1", sYear, sMonth, seq(1:4))
      
      data = urlList %>%
        purrr::map(~ getUrlText(.x, 'a.bo3 > b')) %>%
        unlist() %>%
        as.data.frame() %>%
        dplyr::mutate(
          year = sYear
          , month = sMonth
          ) %>%
        dplyr::bind_rows(data)
    }
     
    dataL1 = data %>%
      dplyr::arrange(year, month)
    
    dplyr::tbl_df(dataL1)
    
    
      
    # 네이버 뉴스 크롤링
    library(rvest)
    library(stringr)
    library(tidyverse)
    library(dplyr)
    library(magrittr)
    
    dtDate = seq.Date(as.Date("2019-01-01"), as.Date("2019-12-31"), "1 day")
    sDate = format(dtDate, "%Y%m%d")
    
    # Sys.setlocale("LC_ALL")
    # options(encoding = "UTF-8")
    # Sys.setenv(LANG = "en_US.UTF-8")
    
    getUrlText = function(url, xpath) {
      xml2::read_html(url) %>%
        rvest::html_nodes(xpath = paste0(xpath)) %>%
        rvest::html_text() %>%
        str_replace_all(pattern = "\n", replacement = " ") %>%
        str_replace_all(pattern = "[\\^]", replacement = " ") %>%
        str_replace_all(pattern = "\"", replacement = " ") %>%
        str_replace_all(pattern = "\\s+", replacement = " ") %>%
        str_trim(side = "both")
    }
    
    getUrlHref = function(url, xpath) {
      xml2::read_html(url) %>%
        rvest::html_nodes(xpath = paste0(xpath)) %>%
        rvest::html_attr("href") 
    }
    
    for (d in sDate) {
      
      print(d)
      url = sprintf("https://news.naver.com/main/list.nhn?mode=LSD&mid=sec&sid1=001&date=%s&page=%d",d, seq(1:1500))
      
      data = url %>%
        purrr::map(~ getUrlText(.x, '//*[@id="main_content"]/div[2]/ul[*]/li[*]/dl/dt[2]/a')) %>%
        unlist() %>%
        as.data.frame() 
      
      dataL1 <- data %>%
        magrittr::set_colnames("title") %>%
        dplyr::distinct(title) %>% 
        dplyr::mutate(date = d)
      
      
      write.csv(dataL1,paste0("./TITLE/2019/title_",d,".csv"),fileEncoding = "CP949")
      
    }
    
    # R프로그램으로 프로그램짜기
    # 주사위 8번 던질때 홀짝 분포를 히스토 그램으로 나타내고 싶습니다.
    
    set.seed(1)                   # 난수로 생성된 수열을 고정시킴
    X = 1:6  # 난수 생성 (모집단 생성)
    
    # hist(X)  # 모집단의 빈도분포 
    # cat(mean(X), var(X), sd(X), "\n")  # 모집단의 평균/분산/표준편차
    
    
    ################################################### 표본평균집단에 대해서 ###########################################################
    for (i in c(10, 50, 100, 250)) {
      
      DO = 1000    # Number of repetition 
      # N = i          # Number of sample
      N = 8
      
      ## 비복원 추출(무작위 정렬) : 한번 뽑은 것을 다시 뽑을 수 없는 추출
      Sort = lapply(1:DO, function(i) sample(X, N, replace = TRUE))
      
      
      mapply(function(x, y) seq_len(x) + y,
             c(a =  1, b = 2, c = 3),  # names from first
             c(A = 10, B = 0, C = -10))
      
      
      Sort
      mapply(rep, 1:4, 4:1)
      
      
      Sort_mean = mapply(mean, Sort)
      
      mapply(mean, Sort)
      
      lapply(Sort, "%%", 2)
      
      ## FIG
      # nf <- layout(matrix(c(1,1),1,byrow=T), c(1,1), c(1,1)) ; layout.show(nf) ; par(mar=c(5,5,5,5)) ; par(cex=1.0)
      hist(Sort_mean, breaks=50, xlab="Sample Distribution Mean", xlim=c(0.3, 0.7), col = "light grey", border = "grey", xaxs="i", yaxs="i",
           main=paste0("Central Limit Theorem : number of sample = ", N, ", number of repetition = ", sprintf("%d", DO)))
      
      XX1 = mean(Sort_mean)+sd(Sort_mean)
      XX2 = mean(Sort_mean)-sd(Sort_mean)
      XX3 = mean(Sort_mean)+2*sd(Sort_mean)
      XX4 = mean(Sort_mean)-2*sd(Sort_mean)
      XX5 = mean(Sort_mean)+3*sd(Sort_mean)
      XX6 = mean(Sort_mean)-3*sd(Sort_mean)
      YY = max(hist(Sort_mean, breaks=50, plot=F)$counts)
      lines( c(mean(Sort_mean), mean(Sort_mean)), c(0, YY), lty=1, col=4) ; text(mean(Sort_mean), YY/2, "Mean")
      lines( c(XX1, XX1), c(0, YY), lty=1, col=2 ) ; text( XX1, YY/2, "+1σ")
      lines( c(XX2, XX2), c(0, YY), lty=1, col=2 ) ; text( XX2, YY/2, "-1σ")
      lines( c(XX3, XX3), c(0, YY), lty=1, col=2 ) ; text( XX3, YY/2, "+2σ")
      lines( c(XX4, XX4), c(0, YY), lty=1, col=2 ) ; text( XX4, YY/2, "-2σ")
      lines( c(XX5, XX5), c(0, YY), lty=1, col=2 ) ; text( XX5, YY/2, "+3σ")
      lines( c(XX6, XX6), c(0, YY), lty=1, col=2 ) ; text( XX6, YY/2, "-3σ")
      lines( c(max(Sort_mean), max(Sort_mean)), c(0, YY), lty=1, col=3 ) ; text(max(Sort_mean), YY/2, "Max")
      lines( c(min(Sort_mean), min(Sort_mean)), c(0, YY), lty=1, col=3 ) ; text(min(Sort_mean), YY/2, "Min")
    }
    
    # 
    # R 프로젝트 파일 변환 할수있나요?
    # R프로젝트 파일 MS 워드나 한글 2020 파일로 나올수있게 변환가능한가요?...
    
    library(officer)
    library(ggplot2)
    
    docx = read_docx()
    #段落を追加
    body_add_par(x = docx, value = "Word Test", style = "Normal", pos = "on")
    body_add_par(x = docx, value = paste(1, 3, 5, 99999, 8, collapse = " "), style = "Normal", pos = "after")
    
    cursor_reach(x = TestDocx2, keyword = 99999)
    body_remove(x = TestDocx2)
    
    print(TestDocx2, target = "TEST2.docx")
    
    # 임시 표 생성
    n = 15
    TestData = data.frame(
      "Group" = sample(paste0("Group", 1:5), n, replace = TRUE)
      , "x" = sample(c(1:100), n, replace = TRUE)
      , "y" = sample(c(1:200), n, replace = TRUE)
      )
    
    src = tempfile(fileext = ".png")
    
    # 임시 그림 생성
    ggplot(TestData, aes(x, y)) +
      geom_point() +
      ggsave(src)
    
    # 그림 생성
    cursor_reach(x = docx, keyword = "TEST")
    body_add_img(x = docx, src = src, width = 3, height = 3, style = "centered", pos = "after")
    
    # 테이블 생성
    body_add_table(x = docx, value = TestData, style = "Light List Accent 2", pos = "after", first_row = TRUE, first_column = FALSE, last_row = FALSE, last_column = FALSE, no_hband = FALSE, no_vband = TRUE)
    
    print(docx, target = "OUTPUT/Test.docx")
    
    # 
    library(plyr)
    library(dplyr)
    
    data = sample(1:30, 30, replace = TRUE)
    tableData = table(data)
    
    
    aa = as_data_frame(tableData) %>%
      dplyr::mutate(val = if_else(as.numeric(data) > 10, 10, 0)) %>%
      dplyr::select(data, val) %>%
      as.data.frame.table()
    
    dd = table(aa)
    
    
    library(data.table)
    DF = data.frame(x=rep(c("x","y","z"),each=2), y=c(1,3,6), row.names=LETTERS[1:6])
    as.data.table(DF)
    as.data.table(DF, keep.rownames=TRUE)
    as.data.table(DF, keep.rownames="rownames")
    
    # home이라는 데이터셋을 사용하여 문제를 풀라는데 home이라는 데이터셋이 없어요.
    # 그럼 home이라는 데이터를 다운받아야되는건가요? 아니면 만들수가 있는건가요?
    # 다운받아야되는거라면 위치좀 알려주세요 저도 찾아봤는데 없어요.
    # 만들수 있는거라면 어떤식으로 만들어야되는지 알려주세요.
    # 처음에는 data.frame으로 하는줄 알았는데 안되서 올립니다.
    # 빠른답변좀요.
    
    # library(UsingR)
    library(UsingR)
    
    data(home)
    
    home
    
    # 1~30중 4의배수 또는 9의배수일 확률 R로 작성해야하는데
    # 뭐가 틀린지 모르겠네요..
    
    S <- c(1:30); S
    B <- subset(S, (S %% 4)==0 | (S %% 9)==0); B
    
    length(B)/length(S)
    
    # apply 함수를 이용해서 각 열에서 숫자 1이 몇 개 있는지 개수를 출력해야 하는데요.
    # length(which(mydata[1]=="1")) 로 일일이 출력하면 숫자가 잘 나오는데
    # apply(mydata, 2, function(x) length(which(mydata[2]=="1")))로 하면 아예 다른 엄청 큰 수가 나옵니다.
    # 왜 이런 건가요? 그리고 어떻게 고쳐야 하나요?
    
    data = data.frame(
        key = c(1, 2, 3, 4, 1, 2, 3)
        )
    data
    
    apply(data, 2, function(x) { sum(ifelse(x == 1, 1, 0)) })
    
    
    # 데이터 내에서 일차함수의 기울기 값 만을 추출하고 싶은데
    # R코드 관련해서 어떻게 작성하는지 아시는 분 있으신가요??
    
    lmFit = lm(hp ~ mpg, data = mtcars)
    lmFit
    
    #  기울기 
    coef(lmFit)[2]
    
    # 절편 
    coef(lmFit)[1]
    
    # 
    # p(Z<z1) = 0.9474
    # 에서 z1을 R에서 어떻게 구하죠... ?̊̈
    
    rnormData = rnorm(n = 1000, mean = 0, sd = 1)
    
    hist(rnormData)
    
    conf = quantile(rnormData, p = 0.9474)
    conf
    
    text(conf, 0, "|", col = "red", cex = 2.0)
    
    
    # hist()함수 쓸때 옵션중에 breaks=옵션이 계급간격을 조정해준다고 하는데 어떤구간을 얘기하는 건가요 ? breaks 옵션을간격을 조정해봐도 계급구간이 옵션을 준 숫자만큼 변형이 잘안되서요 어떤기준인지 알려주세요
    # 그리고 probability , prob 옵션도 설명 부탁드려요 ~
        
    data = c(71, 84, 68, 75, 91, 87, 63, 77, 81, 98, 57, 73, 74, 85, 50, 62, 66, 78, 65, 59, 75, 89, 94, 93, 86, 61, 87, 74, 70, 67)
    
    # 빈도 분포
    hist(data, breaks = seq(50, 98, 8), probability = FALSE)
    
    # 밀도함수
    hist(data, breaks = seq(50, 98, 8), probability = TRUE)
    
    # 제가 R Studio 쌩 초보인데 csv 파일을 어떻게 불러오나요? 
    # 그리고 데이터객체 이름 정하고 정한 이름을 작업폴더에 csv 파일로 저장하는 법 알려주실 수 있을까요.
    
    data = read.csv("INPUT/출산율.csv", encoding = "utf-8")
    data = read.csv("INPUT/출산율.csv", encoding = "cp949")
    data = read.csv("INPUT/출산율.csv", encoding = "euc-kr")
    
    data
    
    # 
    
    # 코드는 이렇게 작성하고
    # 엑셀은 단순히 판매량(아이스크림이라 그런지 기본이 억대입니다.)만 작성하고 R로 불러왔습니다.
    # 안보이는 부분은
    # hist(icsale, main="icecream sales volume", xlab="sales volume, ylab="frequency"로 작성했습니다.
    # 근데 실행하니깐 x는 반드시 숫자이어야 한다고 하네요ㅜㅜ
    # 어디가 잘못 된건지 모르겠습니다
    
    hist(as.numeric(icsale$판매량), main="icecream sales volume", xlab="sales volume", ylab="frequency")
    
    # 안녕하세요, 고수님들!! 
    # R Studio 왕초보자입니다.
    # 다름이 아니라 학교과제중에
    # 저기 제가 불러온 표에서 placebo에 관한 평균과 wirkstoff에 관한 평균을 구하라는 문제가 있는데요,
    # 도대체 변수를 어떻게 지정하고 어떻게 평균을 구해야하는지 막막해서 질문을 올립니다.
    # 제발 답변 꼭 부탁드립니다.!!! 
    
    data = data.frame(
        num = c(10010, 10012, 10015, 10017, 10021, 10023, 10044, 10055, 10059, 10060, 10065, 10070, 10072, 10074, 10079, 10080, 10090, 10093, 10096, 10101, 10103, 10118, 10123, 10125, 10126)
        , gender = c(1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 1, 2, 1, 2, 2, 2, 1, 2, 2, 1, 1, 1, 2, 1, 1)
        , kidney = c(184.0, 160.3, 179.3, 176.2, 166.4, 168.0, 177.0, 162.4, 170.9, 188.3, 174.3, 171.7, 185.3, 165.5, 172.2, 168.6, 176.0, 168.1, 165.9, 183.0, 163.2, 176.5, 165.3, 180.9, 176.5)
        , weight = c(76.4, 57.2, 74.2, 68.2, 56.6, 64.8, 67.5, 51.2, 65.8, 77.5, 64.2, 62.6, 80.8, 64.5, 81.6, 68.0, 81.3, 72.3, 54.1, 84.0, 63.0, 68.3, 54.7, 96.0, 74.4)
        , legLength = c(101.6, 90.2, 99.4, 97.1, 91.0, 92.9, 103.6, 95.0, 79.5, 103.1, 102.7, 99.6, 101.2, 93.5, 97.5, 94.0, 95.6, 95.4, 92.6, 98.4, 86.7, 102.6, 96.5, 103.5, 95.1)
        , running = c(6.17, 6.87, 6.39, 6.77, 6.93, 7.15, 7.68, 7.50, 6.70, 6.58, 6.39, 6.92, 6.38, 6.91, 7.35, 7.12, 6.55, 7.26, 6.96, 6.48, 6.84, 6.00, 7.48, 6.71, 6.73)
    )
    
    # kidney 평균 
    mean(data$kidney, na.rm = TRUE)
    
    # weight 평균 
    mean(data$weight, na.rm = TRUE)
    
    # [,1]         [,2]       
    # [1,] "1서소문동"   "6개포동"   
    # [2,] "2태평로"     "7개포동"   
    # [3,] "3서초동"     "8관훈동"   
    # [4,] "4관훈동"     "9남대문"   
    # [5,] "5분당삼평"   "10남대문" 
    
    # 안녕하세요
    # R에서 위 행렬을  한줄의 벡터로 만들려고 합니다
    # as.vector 쓰면 1열 전체 뒤에 2열이 붙어서 고민인데요
    # 1 6 2 7 3 8 ... 순으로 벡터를 만드는 방법이 없을까요?
        
    # 예시)
    # "1서소문동","6개포동","2태평로","7개포동","3","8"...
    
    data = data.frame(
        col1 = c("1서소문동", "2태평로", "3서초동")
        , col2 = c("6개포동", "7개포동", "8관훈동")
        )
    
    dataL1 = c()
    
    for (i in 1:nrow(data)) {
        for (j in 1:ncol(data)) {
            val = data[i, j]
            
            dataL1 = append(dataL1, val)
        }
    }
    
    dataL1
    
    # R에서 제공하는 trees 데이터셋에 대해 다음 문제를 해결하기 위한 R 코드를 작성하시오.
    
    # (1) 나무의 지름(Girth)과 높이(Height)에 대해 산점도와 상관계수를 보이시오.
    library(ggpubr)
    library(GGally)
    library(ggplot2)
    
    ggscatter(trees, x = "Girth", y = "Height", add = "reg.line") +
        stat_cor(label.x = 7, label.y = 90) +
        stat_regline_equation(label.x = 7, label.y = 85) + 
        theme_bw()
    
    # (2) trees데이터셋에 존재하는 3개 변수 간의 산점도와 상관계수를 보이시오.
    ggpairs(trees)
    
    
    # trees데이터셋에 존재하는 3개 변수 간의 산점도와 상관계수를 보이시오
    # 인데 이게
    # cor(iris[ , 1:3])이 맞는지 아닌지 모르겠네요
    cor(trees)
    
    # 데이터를 가공하는데 궁금증이 생겨 질문남깁니다.
    # 예를들어
    # 1 1 1 1
    # 2 2 2 2
    # 3 3 3 3
    # 과 같은 데이터가 존재할때 이를
    # 1
    # 1
    # 1
    # 1
    # 2
    # 2
    # 2
    # 2
    # 3
    # 3
    # 3
    # 3
    # 과 같은 모양으로 바꾸는 함수는 어떤걸 써야할까요?
    #     for문과 cbind를 함께 사용하고 t를 써서 방향을 돌려서 데이터를 뽑아내는걸 생각했는데 뜻대로 되지를 않네요. 데이터의 갯수가 3만개가 넘어 for문 사용이 필수적인 상황입니다.
    # 도움을 받을 수 있을까요?
    
    
    data = data.frame(
        col1 = c(1, 2, 3)
        , col2 = c(1, 2, 3)
        )
    
    dataL1 = data.frame()
    
    
    for (i in 1:nrow(data)) {
        for (j in 1:ncol(data)) {
            
            val =  data.frame(data[i, j])
            
            dataL1 = dplyr::bind_rows(dataL1, val)
        }
    }
    
    colnames(dataL1) = c("val")
    dataL1
    
    # R프로그래밍 5x5의 data.frame 이나 matrix를 만들려고 하는데 초기화된 값을 
    # function함수로 만들어 놓고 싶은데 코드를 어떻게 구성해야 하나요 ??
    
    initData = function(initVal, ncol, nrow) {
        maData = matrix(initVal, ncol=ncol, nrow=nrow)
        
        return(maData)
    }
    
    maData = initData(2, 5, 5)
    maData
    
    
    # R에서 급여는 급여끼리 묶어서 합계를 구하고 평균을 구하는 방법을 알고 싶어요
    # aggregate 함수 써서 사용하는거 맞나요?
    # 급여입원료, 급여 진찰료 등등 급여 들어 있는 글자(노란색으로 밑줄친 부분)끼리 모여서 합계 , 평균 구하는 방법 알려주세요
    
    library(dplyr)
    
    data = data.frame(
        급여진찰료 = c(1, 2, 3)
        , 진찰료 = c(1, 2, 3)
        , 급여입원료 = c(4, 5, 6)
    )
    
    
    data %>%
        dplyr::select(starts_with("급여")) %>%
        dplyr::summarise_all(funs(
            sum(., na.rm = TRUE) # 합계
            , mean(., na.rm = TRUE) # 평균값
        )) %>%
        dplyr::glimpse()
    
    # R에서 set.seed(1)
    # x <-c("T","R","I","A","N","G","L","E","S")
    # sample(x,n,replace=T,prob=NULL)
    # n=10
    # 을 이용해서 T,R,I,A,N,G,L,E,S 을 복원 추출로 10번 뽑는 함수를 만들었는데요
    # 혹시 9개단어 각각의 대해서 10번 복원 추출했을시 2번 이상 뽑힌 적이 있는 지 여부를 TRUE,FLASE로 
    # 출력하는 방법을 알려주실수 있나요ㅠㅠ
        
    set.seed(1)
    x <-c("T","R","I","A","N","G","L","E","S")
    n=10
    
    data = data.frame(
        key = sample(x,n,replace=T,prob=NULL)
        )
    
    dataL1 = data %>%
        dplyr::group_by(key) %>%
        dplyr::summarise(n = n()) %>%
        dplyr::mutate(
            isFlag = dplyr::if_else(n > 1, TRUE, FALSE)
        )
    
    dplyr::tbl_df(dataL1)
    
    # 
    # 풀다가 전혀 감이 안와서 물어보는데 
    # mlbench 패키지에서 제공하는 Ionosphere 데이터셋에 대해 문제를 해결하기 위한 R 코드를 작성하라는 문제에요!  
    
    # (1) 다음과 같이 Ionospere 데이터셋을 myds에 저장하시오.
    
    library(mlbench)
    library(dplyr)
    
    data("Ionosphere")
    myds <- Ionosphere
    
    
    # (2) myds에서 class와 V1열의 값을 그룹으로 하여 V3~V10 열의 값들의 표준편차를 출력하시오. (주의 : 집계 작업시 팩터 타입의 열은 제외해야 한다.)
    # 이 문제를 어떻게 풀어야 할지 감이 안와서 도와주세요...
    
    dataL1 = myds %>%
        dplyr::select(V1, V3:V10) %>%
        dplyr::group_by(V1) %>%
        dplyr::summarise_all(funs(
            sd(., na.rm = TRUE) # 표준편차
        ))
    
    dplyr::tbl_df(dataL1)

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

    [기상학/프로그래밍 언어]

    • sangho.lee.1990@gmail.com

    [해양학/천문학/빅데이터]

    • saimang0804@gmail.com

     

     

     

     

     

     

    본 블로그는 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기