반응형

     정보

    • 업무명     : R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 (2)

    • 작성자     : 이상호

    • 작성일     : 2020-03-30

    • 설   명      :

    • 수정이력 :

     

     내용

    [특징]

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

    • 추가로 2020년 02월 21일04월 30일 현행화 버전을 보내드리오니 참고하시기 바랍니다.

     

     

     

    [지식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)

    INPUT.zip
    9.52MB

     

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

    • 없음

     

    [사용법]

    • 소스 코드 참조

     

    [사용 OS]

    • Window 10

     

    [사용 언어]

    • R v3.6.2

    • R Studio v1.2.5033

     

     소스 코드

    [네이버 지식iN]

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

     

    [전체]

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

    • 2020년 03월 30일 업로드

    #=============================================================================================== 
    # Routine : Main R program
    # 
    # Purpose : NAVER 지식iN
    # 
    # Author : MS. Sang-Ho Lee
    # 
    # Revisions: V1.0 February 21, 2020 First release (MS. Sang-Ho Lee)
    #===============================================================================================
    
    # 안녕하세요,
    # 수강하고 있는 온라인 강의 과제때문에 GSS라는 사이트에서 데이터를 다운받아 R STUDIO의 rmd 파일로 작업을 해야 하는데요. 
    # load("gss.Rdata") 코드를 입력해서 데이터를 불러오면된다고 되어 있는데 계속 오류메세지가 뜹니다ㅜㅜ 
    # 오류메세지는 Error in readChar(con, 5L, useBytes = TRUE) : cannot open the connection 라고 나오고요. 
    # 데이터 파일 불러오는게 간단한 것 같은데 무슨 이유로 계속 안열리는지 모르겠어요 ㅜㅜ
    # 무엇을 어떻게 만져야 되는지 알려주시면 정말 정말 감사드리겠습니다!!
    
    
    # 즉 현재 작업 디렉터리를 기준으로 gss.Rdata을 찾지 못해서 발생된 에러입니다.
    # 따라서 "getwd"를 통해 현재 작업 디렉터리를 확인하고 그에 따라 설정해주시면 됩니다.
    
    getwd()
    
    load("INPUT/gss.Rdata")
    
    # R에서 비선형회귀분석 시에 F값이나 P값을 안 주는데, 
    # 이는 어떻게 구하나요?
    
    dfData = data.frame(
      iCal = c(1, 2, 3, 4, 5)
      , iVal = c(3, 6, 8, 10, 11)
    )
    
    xAxis = dfData$iCal
    xAxis2 = xAxis^2
    yAxis = dfData$iVal
    
    # 비선형 회귀
    oLmFit = lm(yAxis ~ xAxis + xAxis2)
    
    plot(xAxis, yAxis)
    lines(xAxis, predict(oLmFit), col = 'red')
    
    # 범례 생성
    oSummary = summary(oLmFit)
    
    nRsquare = oSummary$adj.r.squared
    nPvalue = oSummary$coefficients[2,4]
    nFvalue = oSummary$fstatistic[1]
    
    oLegend = vector("expression", 2)
    oLegend[1] = substitute(expression(R^2 == nRsquareList), 
                            list(nRsquareList = format(nRsquare, digits = 3)))[2]
    oLegend[2] = substitute(expression(P-Value == nPvalueList), 
                            list(nPvalueList = format(nPvalue, digits = 2)))[2]
    oLegend[3] = substitute(expression(F-Value == nFvalueList), 
                            list(nFvalueList = format(nFvalue, digits = 2)))[2]
    
    legend("bottomright", legend = oLegend, bty = "n")
    
    # X<-1:100
    # sum(X>50)
    # 이거 정답이 왜 50인가여
    # Sum이니까 51부터 100까지 더해야하는거 아닌가요?
    
    x = 1:100
    
    # TRUE의 총 개수를 의미
    sum(x > 50)
    
    # TRUE에 대한 인덱스 추출
    vList = which(x > 50)
    
    sum(x[vList], na.rm = TRUE)
    
    # 25번문제 어떻게 푸나요?
    
    f = function(x, a) {
        return ((x - a) ^ 2)
    }
    
    f(1:2, 3)
    
    
    # 인터넷에 올라온 웹스크래핑 설명을 본 후 제가 직접 활용해보려 하니 바로 막혀버렸습니다 ㅠㅠ
    # 지금 맞닥뜨린 문제는 입력해야 할 url의 소스 코드가 뭔지 모르겠다는 것입니다.
    # 크롬 개발자 도구에서 해당 페이지 html의 어떤 태그를 html_nodes()에 넣어야 하고, 이 태그가 어떤 원리 또는 이유에서 선택되는지가 궁금합니다.
    # 설명글에서는 그냥 크롬 개발자 도구 스크린샷 찍은 것을 보여준 후 이러이러 하니 "searchCont라는 클래스가 붙은 디비전(divisodn) 아래 링크가 들어 있다"와 같이 간단히 언급하고 넘어가서, 개발자 도구를 봐도 어떤 태그를 선택해야 하는지 모르겠습니다.. 흑
    # 
    # 제가 해본 코드는 다음과 같습니다. 
    # 오유 시사게시판 게시글 내용을 스크래핑 해보려 했는데 망이네요 ㅜ
    # 일단, 첫 번째 페이지 url의 html을 불러온 부분( html <- read_html(urls[1]) )부터 설명글과 달리 저는 xml_document가 아닌 html_document가 뜹니다 ; 
    # html2, html3 리스트에는 아무것도 들어가지 않은 걸로 뜨고요.
    # 
    # basic_url <- "http://www.todayhumor.co.kr/board/list.php?table=sisa&page="
    # urls <- NULL
    # for(x in 1:10){
    #     urls[x] <- paste0(basic_url, x)
    # }
    # 
    # html <- read_html(urls[1])
    # html2 <- html_nodes(html, '.view list_tr_sisa')
    # html3 <- html_nodes(html2, 'a')
    # 
    # 직접 지지고 볶아야 실력이 늘거라 생각하고 덤볐는데 넘 초반부터 막혀버렸네요 허허 
    # 고수님들 도움 좀 부탁드리겠습니다.
    
    
    library(foreach)
    library(rvest)
    library(tidyverse)
    library(data.table)
    library(dplyr)
    
    Sys.setlocale("LC_ALL", "English")
    options(encoding = "UTF-8")
    Sys.setenv(LANG = "en_US.UTF-8")
    
    # Option
    iPage = 10
    
    fnGetUrlText = function(sUrl, sXpath) {
        read_html(sUrl) %>%
            html_nodes(xpath = paste0(sXpath)) %>%
            html_text() 
    }
    
    dfDataL1 = data.frame()
    
    foreach::foreach(iCount = 1:iPage, .combine=c) %do% {
        
        cat(iCount, "\n")
        sUrl = paste0("http://www.todayhumor.co.kr/board/list.php?table=sisa&page=", iCount)
        
        dfData = tibble::tibble(
            arrNumber = fnGetUrlText(sUrl, '/html/body/div[4]/div/div/table/tbody/tr[*]/td[1]/a')[1:30]
            , arrTitle = fnGetUrlText(sUrl, '/html/body/div[4]/div/div/table/tbody/tr[*]/td[3]/a')
            , arrsName = fnGetUrlText(sUrl, '/html/body/div[4]/div/div/table/tbody/tr[*]/td[4]/a')
            , arrDate = fnGetUrlText(sUrl, '/html/body/div[4]/div/div/table/tbody/tr[*]/td[5]')
            , arrCount = fnGetUrlText(sUrl, '/html/body/div[4]/div/div/table/tbody/tr[*]/td[6]')
            , arrRecom = fnGetUrlText(sUrl, '/html/body/div[4]/div/div/table/tbody/tr[*]/td[7]')
        )
        
        dfDataL1 = dplyr::bind_rows(dfDataL1, dfData)
    }
    
    dplyr::tbl_df(dfDataL1)
    
    
    # 
    # 안녕하세요 기상데이터를 받으려고 하는데 
    # 대량의 데이터를 다운받으려고 합니다.
    # Error in paste0(getwd(), "/", dirname, "/", file_name[count]) : 
    #     object 'file_name' not found
    # 이렇게 에러가 나서요 ㅠ
    # 
    # 코딩 확인 부탁드릴게요 ㅜㅜ
    # -------------------------------------------------------------------------------------------------------------------
    
        rm(list=ls())
    dirname<-"climate_swat"
    dir.create(dirname)
    for(page_num in 1) {
        default_url <- "https://data.kma.go.kr/data/grnd/selectAwsRltmList.do?pgmNo=56&tabNo="
        lm_2_url <- paste0(default_url,page_num)
    }
    lm_2_html <- read_html(lm_2_url)
    lm_2_table<-lm_2_html %>%
        html_nodes("bbsList table")
    
    lm_2_file_url<-lm_2_table %>%
        html_nodes(".title") %>%
        html_node("a") %>%
        html_attr("href")
    
    for(for_url in lm_2_file_url) {
        file_url<-read_html(for_url) %>%
            html_node(".float-right") %>%
            html_nodes("a") %>%
            html_attr("href")
        
        file_name<-read_html(for_url)%>%
            html_nodes(".float-right") %>%
            html_nodes("a") %>%
            html_text()
        }
    
    for(count in 1:2) {
        destfile_name <-
            paste0(getwd(),"/",dirname,"/",file_name[count])
        download.file(file_url[count],destfile=destfile_name)
    }
    
    
    
    # lm은 선형회귀식을 위한 거 아니에요?
    #   저는 지금 nls를 이용해서 지수함수(y~a*exp(-b*x))를 피팅하고 있는데,
    # nls는 p값과 f값을 제공하지 않아서,
    # 그 값을 계산하고 싶은데요.
    # 다른 방법이 있나요?
    
    dfData = data.frame(
      iCal = c(1, 2, 3, 4, 5)
      , iVal = c(3, 6, 8, 10, 11)
    )
    
    # 비선형 회귀
    oNls = nls(iVal ~ a * exp(-b * iCal), data = dfData, start = list(a = 1, b = 0))
    
    yPred = predict(oNls)
    
    plot(xAxis, yAxis)
    lines(xAxis, yPred, col = 'red')
    
    # 범례 생성
    oCorTest = cor.test(xAxis, yPred)
    
    nRsquare = oCorTest$estimate
    nPvalue = oCorTest$p.value
    nFvalue = oCorTest$statistic
    
    oLegend = vector("expression", 2)
    oLegend[1] = substitute(expression(R == nRsquareList), 
                            list(nRsquareList = format(nRsquare, digits = 3)))[2]
    oLegend[2] = substitute(expression(P-Value == nPvalueList), 
                            list(nPvalueList = format(nPvalue, digits = 2)))[2]
    oLegend[3] = substitute(expression(F-Value == nFvalueList), 
                            list(nFvalueList = format(nFvalue, digits = 2)))[2]
    
    legend("bottomright", legend = oLegend, bty = "n")
    
    # 어떠한 과정을 거쳐 4 1 이 나오는지 알고 싶습니다ㅠㅠ x와 a 에 어떤 방식으로 값이 입력되는건가요??
    
    # 안녕하세요? 해솔입니다.
    # 
    # 해당 답변에 대한 소스 코드 및 실행 결과를 보내드리오니 확인 부탁드립니다.
    # 
    # 알고리즘 흐름은 다음과 같습니다.
    # f(1, 3) 호출 >>  (1 - 3)^2 계산 >> 숫자 4 반환
    # f(2, 3) 호출 >>  (2 - 3)^2 계산 >> 숫자 1 반환
    # 
    # 최종적으로 4 1로 반환 결과를 확인할 수 있습니다.
    # 
    # 좋은 하루 보내세요.
    # 
    # 해솔 올림.
    
    
    # 안녕하세요. 혹시 가능하면 또 하나 질문해도 될까요? 그 정보공개서 해당 업체의 링크를 타고 들어가면 대표번호가 있습니다. 그 대표번호만 끌고올 수 잇는 방법이 있을 까요?
    #  현재 엑셀탭이 번호,상호, 영업표지, 대표자, 등록번호, 업종 순으로 되어있는데 그 옆에 링크안에 있는 내용인 대표번호가 탭으로 나오게 하고싶습니다 ㅠㅠ 마지막 부탁입니다. 귀찮게 해드려 정말 죄송합니다.
    
    library(rvest)
    library(tidyverse)
    library(data.table)
    library(purrr)
    
    Sys.setlocale("LC_ALL", "English")
    
    fnGetUrlHref = function(sUrl, sXpath) {
      xml2::read_html(paste0(sUrl)) %>%
        rvest::html_nodes(xpath = paste0(sXpath)) %>%
        rvest::html_attr("href")
    }
    
    fnGetUrlTable = function(sUrl, sXpath) {
      xml2::read_html(paste0(sUrl)) %>%
        rvest::html_nodes(xpath = paste0(sXpath)) %>%
        rvest::html_table()
    }
    
    fnGetUrlText = function(sUrl, sXpath) {
      xml2::read_html(sUrl) %>%
        rvest::html_nodes(xpath = paste0(sXpath)) %>%
        rvest::html_text()%>%
        gsub("^\\s+|\\s+$", "", .)  
    }
    
    sUrl = paste0("https://franchise.ftc.go.kr/user/extra/main/62/firMst/list/jsp/LayOutPage.do?column=&search=&searchFirRegNo=&selUpjong=&selIndus=&srow=100&spage=1")
    
    dfData = fnGetUrlTable(sUrl, '//*[@id="txt"]/table')
    
    dfDataL1 = dfData[[1]] %>%
      dplyr::mutate(
        sNameLink = paste0("https://franchise.ftc.go.kr", fnGetUrlHref(sUrl, '//*[@id="txt"]/table/tbody/tr[*]/td[2]/a'))
        , sCompLink = paste0("https://franchise.ftc.go.kr", fnGetUrlHref(sUrl, '//*[@id="txt"]/table/tbody/tr[*]/td[3]/a'))
        , sPhoneNumber = purrr::map2(sNameLink, '//*[@id="txt"]/div[1]/div/table[1]/tbody/tr[3]/td[3]', fnGetUrlText)
      ) 
    
    dplyr::tbl_df(dfDataL1)
    
    # r프로그래밍 lubridate의 피리어드형
    # hours의 결과값을 어떻게 읽어야하나요 왜두줄인지도....
    
    library(lubridate)
    
    # 2개 전달 인자
    arrHour = lubridate::hours(c(12, 24))
    
    # 1번째 결과 반환
    arrHour[1]
    
    # 2번째 결과 반환
    arrHour[2]
    
    
    # 1개 전달 인자
    oHour = lubridate::hours(12)
    
    # 결과 반환
    oHour
    
    # flights%>%count(week=floor_date(dep_time,"week"))%>%
    # +  ggplot(aes(week,n))+geom_line()
    # Error in object[[name, exact = TRUE]] : 첨자의 허용 범위를 벗어났습니다
    # 어떤 부분이 오류가 난건가요??
    
    library(nycflights13)
    library(tidyverse)
    
    make_datetime_100 <- function(year, month, day, time) {
      make_datetime(year, month, day, time %/% 100, time %% 100)
    }
    
    dfFlights = nycflights13::flights %>% 
      dplyr::filter(!is.na(dep_time), !is.na(arr_time)) %>% 
      dplyr::mutate(
        dep_time = make_datetime_100(year, month, day, dep_time),
        arr_time = make_datetime_100(year, month, day, arr_time),
        sched_dep_time = make_datetime_100(year, month, day, sched_dep_time),
        sched_arr_time = make_datetime_100(year, month, day, sched_arr_time)
      ) %>% 
      dplyr::select(origin, dest, ends_with("delay"), ends_with("time"))
    
    dfFlights %>% 
      count(week = floor_date(dep_time, "week")) %>% 
      ggplot(aes(week, n)) +
      geom_line()
    
    
    # R에서 epanet2toolkit 패키지를 불러오려하는데 아래와 같은 오류가 뜹니다..ㅠㅠ 어떻게 해결하죠(as ‘lib’ is unspecified)
    
    install.packages("epanet2toolkit", INSTALL_opts = "--install-tests")
    
    install.packages("epanet2toolkit")
    
    library(devtools)
    devtools::install_github("bradleyjeck/epanet2toolkit", force = TRUE)
    
    library(epanet2toolkit)
    
    ?epanet2toolkit
    
    ENepanet("Net1.inp", "Net1.rpt")
    
    # 
    # 아래와 같은 표가 있는데 time series 그래프를 그리고 싶습니다.
    # 1) 셀을 합치지 않고 그래프를 그릴 수 있는 방법이 있나요?
    # 2) 합쳐야 한다면 어떻게 하나요? make_date를 쓰니까 날짜까지 다 나오더군요.
    
    library(tidyverse)
    library(lubridate)
    
    # 임의 데이터 생산
    dfData = tibble::tibble(
      iYear = c(rep(1982, 12), 1983)
      , iMonth = c(seq(1, 12), 1)
      , nMeanTemp = rnorm(13) * 20
    ) 
    
    dfDataL1 = dfData %>%
      dplyr::mutate(
        nXranYm = iYear + ((iMonth - 1) / 12.0)
      )
    
      
    xAxis = dfDataL1$nXranYm
    yAxis = dfDataL1$nMeanTemp
    
    plot(xAxis, yAxis)
    
    oLmFit = lm(yAxis ~ xAxis)
    abline(oLmFit, col = 'red')
    
    # r 스튜디오에서 코드복사나 코드수정어떻게하나요?
    # 코드복사하면 +가 같이 복사되던데 +가 복사되는건 크게 의미있는건아닌가요?
    
    # 코드 복사의 경우 "<Ctrl + c>"을 수정하면 됩니다.
    # 코드 수정의 경우 해당 변수에 마우스 더블 클릭을 통해 수정 가능합니다.
    # R 프로그램에서 "+" 기호는 줄바꿈을 의미하기 때문에 해당 기호 포함하여 복사해야 합니다.
    
    # x에 rnorm(10)을 넣은건데 function에 인수를 넣으면 어떻게되눈건가요?? function의 인수는 어디에쓰이는건기요??
    
    rescale01 = function(x) {
      rng = range(x, na.rm = TRUE)
      (x - rng[1]) / (rng[2] - rng[1])
    }
    
    # rescale01(c(0, 5, 10))
    
    nRnorm = c(rnorm(10))
    
    nRnorm
    
    rsResult = rescale01(nRnorm)
    
    rsResult
    
    # 안녕하세요. R과 R 스튜디오 모두 최신판으로 설치했고
    # 사용하려는데 R 스튜디오와 R 모두에서 객체 생성이 되지 않습니다. 이유가 뭘까요...?
    
    x <- 10
    
    x
    
    x = 9
    
    x
    
    # Rstudio 설치 후 라이브러리 인스톨 시 에러
    # C아래 바로 폴더로 설치했구요(환경은 윈10, 64)
    # 라이브러리 설치하면서,계속 아래와 같은 메시지가 떠서 타이핑이 불가능합니다.
    
    # 이는 설치 경로에서 한글 파일이 존재하기 때문에 발생되는 문제입니다.
    # 따라서 한글을 영어로 변경한 후에 Rstudio 및 R 재 설치를 부탁드립니다.
    
    # r 데이터 병합, 추출 질문입니다.
    # 이렇게 원하는 변수를 가지고 하나의 데이터로 합치는 방법이 궁금합니다.
    
    library(tidyverse)
    
    dfData = data.frame(
        nTime = c(1:5)
        , nNumber = c(5, 6, 2, 7, 1)
        )
    
    dplyr::tbl_df(dfData)
    
    dfData2 = data.frame(
        nTime = c(1:6)
        , nSale = c(20, 15, 30, 40, 60, 50)
        )
    
    dplyr::tbl_df(dfData2)
    
    dfDataL1 = dfData %>%
        dplyr::full_join(dfData2, by = c("nTime" = "nTime"))
    
    dplyr::tbl_df(dfDataL1)
    
    # R을 사용할 때, 
    # 데이터에서 날짜가 X1.22.20 이와 같이 chr 형태인 경우에는
    # 어떻게 lubridate 패키지를 사용해서 날짜 형태로 바꿀 수 있나요? 
    
    library(lubridate)
    
    sDate = "2020-03-09 12:25"
    class(sDate)
    
    dtDate = lubridate::ymd_hm(sDate)
    
    dtDate
    class(dtDate)
    
    # 
    library(tidyverse)
    
    mtcars
    
    # 
    
    library(xml2)
    library(rvest)
    library(tidyverse)
    
    Sys.setlocale("LC_ALL", "English")
    
    fnGetUrlText = function(sUrl, sXpath) {
        xml2::read_html(paste0(sUrl)) %>%
            rvest::html_nodes(xpath = paste0(sXpath)) %>%
            rvest::html_text()
    }
    
    sUrl = "https://search.naver.com/search.naver?%27,%20%27sm=tab_hty.top&where=nexearch&query=%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90"
    
    sXpath = '//*[@id="nx_related_keywords"]/dl/dd[1]/ul/li[*]/a'
    
    dfData = fnGetUrlText(sUrl, sXpath)
    
    dfData
    
    # 
    # 제가 R을 이용해 아래와 같은 코드로 그래프를 그리는데까지 성공했습니다.
    # 근데 jiho 데이터는 다수의 변수(plant.length, grow.length 등)가 있는데 한번에 묶어서 일괄적으로 ddply()함수를 적용해서 b 라는 데이터프레임을 만들 수 있나요?
    
    library(tidyverse)
    
    dfData = read.csv("INPUT/jiho.csv", stringsAsFactors = FALSE)
    
    dplyr::tbl_df(dfData)
    
    # 속성 및 날짜에 따른 평균
    dfDataL1 = dfData %>%
      tidyr::gather(key = "sKey", value = "nVal", c(-Name, -Day, -No)) %>% 
      dplyr::mutate(dtDate = readr::parse_date(Day, "%Y-%m-%d")) %>%
      dplyr::group_by(sKey, dtDate) %>%
      dplyr::summarise(nMeanVal = mean(nVal, na.rm = TRUE))
    
    dplyr::tbl_df(dfDataL1)
    
    # 날짜에 따른 평균
    dfDataL2 = dfData %>%
      tidyr::gather(key = "sKey", value = "nVal", c(-Name, -Day, -No)) %>% 
      dplyr::mutate(dtDate = readr::parse_date(Day, "%Y-%m-%d")) %>%
      dplyr::group_by(dtDate) %>%
      dplyr::summarise(nMeanVal = mean(nVal, na.rm = TRUE))
    
    dplyr::tbl_df(dfDataL2)
    
    
    # 
    # 제가 이번학기에 R함수에 대해 배우는데 사용중인 변수 목록은 ls()를 통해 볼 수 있는데
    # 아래 사진을 보면 ls() 후 x,y,z가 나와야 하는데 왜 저런 문자가 나오는거죠?
    # 이해가 안가요..
    
    
    # 변수 목록 삭제
    rm(list = ls())
    
    x = 1:10
    y = 11:20
    z = 21:30
    
    # 변수 목록 확인
    ls()
    
    # 이런 형식이 나오는데 이것을 JSON형식으로 바꾸기 위해 
    
    library(rjson)
    
    dfData = data.frame(
      source = c("banana", "banana")
      , target = c("pitch", "graph")
      , type =c ("A", "B")
    )
    
    rjson::toJSON(dfData)
    
    # 이 화면에 나오는 tiltle만 크롤링해서 프린트하고 싶은데 에러가 나오네요. 어디를 어떻게 고치면 될까요 
    
    library(rvest)
    library(tidyverse)
    library(xml2)
    
    fnGetUrlText = function(sUrl, sXpath) {
      xml2::read_html(paste0(sUrl), encoding = "EUC-KR") %>%
        rvest::html_nodes(xpath = paste0(sXpath)) %>%
        rvest::html_text()
    }
    
    sUrl = "https://finance.naver.com/news/news_list.nhn?%27,%20%27mode=LSS2D&section_id=101&section_id2=258"
    
    sXpath = '//*[@id="contentarea_left"]/ul/li[*]/dl/dd[*]/a'
    
    dfData = fnGetUrlText(sUrl, sXpath)
    
    dfData
    
    # 
    
    library(dplyr)
    
    dfData = data.frame(
      source = c("banana", "banana")
      , target = c("pitch", "graph")
      , type =c ("A", "B")
    )
    
    # 
    dfData %>%
      dplyr::filter(type == "A")
    
    dfData %>%
      dplyr::filter(type %in% c("A", "B"))
    
    # 
    
    # v1에서 짝수에 대해서만 2를 곱하여 저장하시오.
    
    v1 <- 51:90
    
    nIndex = which(v1 %% 2 == 0)
    
    nVal = v1[nIndex] * 2
    
    nVal
    
    
    # v1에서 7의 배수들을 제거한 후 v1의 내용을 출력하시오.
    
    v1 <- 51:90
    
    nIndex = which(v1 %% 7 != 0)
    
    nVal = v1[nIndex]
    
    nVal
    
    # x <- c(1, 2, 2, 1, 3, 1) 인데 1은 male로 2는 femal로 3은 unknown으로 할려는데
    
    library(dplyr)
    
    x <- c(1, 2, 2, 1, 3, 1)
    
    dfData = data.frame(x) %>%
      dplyr::mutate(
        type = case_when(
          x == 1 ~ "male"
          , x == 2 ~ "femal"
          , x == 3 ~ "unknown"
          , TRUE ~ "null"
        ))
    
    dfData
    
    # 
    
    library(readxl)
    
    dfData = read_excel("INPUT/sample_data.xlsx", sheet = "생활상태")
    
    dplyr::tbl_df(dfData)
    
    # 1234523456345674567856789가 출력되게하는 방법이 궁금합니다!
    
    nVal = c(
      seq(1,5,1) 
      , seq(2,6,1)
      , seq(3,7,1)
      , seq(4,8,1)
      , seq(5,9,1)
      )
    
    nVal
    
    # 1-100의 정수를 차례로 출력하되 3의 배수에서는 숫자 대신 "+" 출력하는 R 코드를 작성하시오.
    
    nVal = seq(1, 100)
    
    for (nRow in nVal) {
      
      if (nRow %% 3 == 0) {
        nRow = "+"
      } 
      
      cat(nRow)
      
    }
    
    # 소수 (prime number)는 1과 자기 자신 외에는 나누어 떨어지지 않는 수를 말한다. 2-1000 사이의 소수를 출력하는 R 코드를 작성하시오.
    
    prime_numbers = function(n) {
      if (n >= 2) {
        x = seq(2, n)
        prime_nums = c()
        
        for (i in seq(2, n)) {
          if (any(x == i)) {
            prime_nums = c(prime_nums, i)
            x = c(x[(x %% i) != 0], i)
          }
      }
        return(prime_nums)
      } else {
        stop("Input number should be at least 2.")
      }
    } 
    
    prime_numbers(1000)
    
    
    # for문을 이용하여 구구단 중 9단을 출력하는 R 코드를 작성하시오.
    
    setVal = 9
    
    for (iCount in 1:9) {
      for (jCount in 1:9) {
        
        if (iCount == setVal) {
          cat(iCount, " * ", jCount, " = ", iCount * jCount, "\n")
        }
      }
    }
    
    
    # while문을 이용하여 구구단 중 8단을 출력하는 R 코드를 작성하시오.
    
    setVal = 8
    
    iCount = 1
    while (iCount <= 9) {
      
      jCount = 1
      
      while (jCount <= 9) {
        if (iCount == setVal) {
          cat(iCount, " * ", jCount, " = ", iCount * jCount, "\n")
        }
        jCount = jCount + 1
      }
      iCount = iCount + 1
    }
    
    # R프로그램으로 "1부터 100까지 3의 배수의 합"을 구하는 방법이 궁금합니다.!!
    
    nVal = seq(1, 100)
    
    nIndex = which(nVal %% 3 == 0)
    
    sum(nVal[nIndex], na.rm = TRUE)
    
    # 2020년 달력과 연동되게 평일은 1, 주말은 0으로 표기하여 2진변수를 만들어라
    
    library(lubridate)
    library(dplyr)
    
    dtDate = seq.Date(as.Date("2020-01-01"), as.Date("2020-12-31"), "1 day")
    
    dtDate
    
    # nWday에 대해서
    # 월-금 : 2 3 4 5 6
    # 토-일 : 7 1
    
    data.frame(dtDate) %>%
      dplyr::mutate(
        sWdayLabel = lubridate::wday(dtDate, label = TRUE)
        , nWday = lubridate::wday(dtDate)
        , type = case_when(
          2 <= nWday & nWday <= 6 ~ 1
          , TRUE ~ 0
        )
      )
    
    
    # r 프로그래밍 마지막 iv) 에서 z[z %% 0.2 == 0 & z >= 0] 연산하면 왜 0.2, 0.8, 1.4, 2.0가 아니라 numeric(0) 가 뜨는지 잘 모르겠습니다 어디를 어떻게 고치면 될까요 
    
    library(numbers)
    
    z = c(-1.0, -0.7, -0.4, -0.1, 0.2, 0.5, 0.8, 1.1, 1.4, 1.7, 2.0, -0.7, -0.7, -0.4, -0.4, -0.4, -0.4, -0.4, -0.1, -0.1, -0.1, -0.1, 5.5, -3.8)
    
    nIndex = which(z %% 0.2 == 0 & z >= 0)
    
    mod(c(-5:5), 5)
    
    mod(abs(z), 0.2)
    
    -1.0 / 0.2
    
    
    z[nIndex]
    
    
    # 제가 문제
    # y=sin(3x)/(3x) x의 범위는 [-6,6] 
    # x=seq(from=-6,to=6,by=0.01)
    # y=sin (3*x)/(3*x)
    # plot(x,y,type="l")
    # 짯는데
    # 이렇게나왔거든여 
    # 근데 여기서 13개 점밖에 되지않다고하는데 이게 무슨뜻인가요?
        
    x = seq(from = -6, to = 6, by = 1)
    y = sin(3 * x) / (3 * x)
    
    plot(x, y, type = "p")
    points(x, y, type = "l")
    
    # 사진에 나온 프로그램을 다운받아야되는데 뭐가 뭔지 모르겠는데 알려주세요ㅠㅠ
    
    install.packages(c("readxl", "dply", "rgdal", "ggplot2", "ggmap", "rgeos", "raster", "rjava", "RJDBC", "rvest"))
    
    # 1에서 100까지의 7의 배수의 합을 어떻게 구하나요? 7의 배수 나열하는 방법은 알겠는데 합을 ss로 지정한 그 다음에 어떻게 프로그래밍을 해야할 지 모르겠어요.
    
    nVal = seq(1, 100)
    
    nIndex = which(nVal %% 7 == 0)
    
    nVal[nIndex]
    
    sum(nVal[nIndex], na.rm = TRUE)
    
    # 1)에서 만든 행렬을 ad 변수에 저장하고 제일 오른쪽에 매출 데이터(변수명: sales)를 추가하려고 한다. 매출은 1200, 1500, 2100 이다. R에서 cbind()/rbind()를 이용하여ad에 sales를 추가하고 다시ad에 저장 하세요.
    
    ad = data.frame(
        facebook = c(900, 1200, 1900)
        , instagram = c(500, 800, 1800)
        , blog = c(400, 600, 700)
        )
        
    ad
    
    ad = cbind(ad, data.frame(sales = c(1200, 1500, 2100)))
        
    ad 
        
    # 
    library(EnvStats)
    
    EnvStats::cdfPlot(param.list = list(mean = 5, sd = 4), main = "") 
    
    legend("topleft", legend = c("N(5, 4)"), 
           col = c("black"), lwd = 3 * par("cex")) 
    
    title("CDF Plots for Normal Distributions")
    
    # 
        
    # dfData = data.frame(
    #     Age = c(22, 25)
    #     , Name = c("James", "Mathew")
    #     , Gender = c("M", "M")
    # )
        
        
    # R 프로그램에 prophet 설치하면 cran 미러를 선택하라 해서 cloud, seoul, ulsan 다 해봤는데 자꾸 에러가 뜨네요 도와주세요 정말 하나도 몰라요..
    
    install.packages("prophet")
    
    library(prophet)
    
    # 2)번 x 크기순으로 20개씩 평균 구하는거까진 했는데요 그 이후 그래프를 어떻게 그려야할지 모르겠네요..x와 y의 길이가 다르다고 오류뜨네요. 어떤식으로 코드를 짜야할까요?
    # 3)번도 접근방법을 모르겠네요..
    
    library(dplyr)
    
    dfData = data.frame(
        x = sample(100) / 100.0
        , y = sample(100)
    )
    
    dfData %>% 
        dplyr::arrange(x) %>%
        dplyr::mutate(type  = x /20
                      )
    
    plot(dfData$x, dfData$y)
    
    # 이렇게 떠서 재설치도 몇번해봤는데 안됩니다ㅠ 어떻게 해아하나요
    
    # 대부분의 경우 이전 버전의 Windows 7을 사용할 때 발생된 오류입니다.
    # 따라서 일반적으로 OS 업데이트를 설치하는 것이 추천드리나 그렇지 않은 경우 해당 OS에 맞는 Rstudio 사용하시면 됩니다 (링크 참조).
    # https://rstudio.com/products/rstudio/older-versions/
    
    
    # (예제 17) x <- c(1,2,3,4,5)으로 점그래프(산점도)를 3개 그리세요.
    # 1) pch=18을 붉은 색(col="red")과 크기(cex=2)를 2로 하는 산점도 
    # 2) 문자 pch=15:19, 5개의 칼라 col= 1:5, 크기(cex=2)를 2로 하는 산점도
    # 3) 문자 pch=15:19, 2개의 칼라 col= 1:2, 크기(cex=2)를 2로 하는 산점도(리사이클 룰(recycling rule): 벡터의 길이가 짧은 쪽은 반복해서 사용하는 규칙
    
    x <- c(1,2,3,4,5)
    
    plot(x, pch = 18, col = "red", cex = 2)
    plot(x, pch = 15:19, col = 1:5, cex = 2)
    plot(x, pch = 1:2, col = 1:5, cex = 2)
    
    # CAD. DEVILLE       A   11385 14 3 3 4.0 31.5 20 4330 221 44 425 2.28
    # CAD. ELDORADO      A   14500 14 2 2 3.5 30.0 16 3900 204 43 350 2.19
    # CAD. SEVILLE       A   15906 21 3 3 3.0 30.0 13 4290 204 45 350 2.24
    # CHEV. CHEVETTE     A    3299 29 3 3 2.5 26.0  9 2110 163 34 231 2.93
    # CHEV. IMPALA       A    5705 16 4 4 4.0 29.5 20 3690 212 43 250 2.56
    # 원데이터가 다음과 같이 되어있을 때
    # 맨 앞에 문자열 변수를 공백없이 만들려고 앞의 세글자만 가져오려고 합니다.
    # 어떻게 코드를 입력하면 될까요? 제발 도와주세요
    
    library(stringr)
    
    dfDtata = data.frame(
        sType = c("CAD. DEVILLE       A   11385 14 3 3 4.0 31.5 20 4330 221 44 425 2.28"
                  , "CAD. ELDORADO      A   14500 14 2 2 3.5 30.0 16 3900 204 43 350 2.19"
                  )
        )
    
    stringr::str_sub(dfDtata$sType, 1, 3)
    
    # R을 거의 사용해 본 적 없는 초보자를 대상으로
    # 몬티홀 문제 시뮬레이션 R 코드와 상세한 설명 부탁드려요.
    # 내공 400 겁니다. 
    
    ######################################## 모집단 및 표본집단의 평균/분산/표준편차 비교 ##############################
    ##  - 중심극한정리 : 동일한 확률분포를 가진 독립확률 변수 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)) {
        
        DO = 100000    # Number of repetition 
        N = i          # Number of sample
        # N = 30       
        
        ## 비복원 추출(무작위 정렬) : 한번 뽑은 것을 다시 뽑을 수 없는 추출
        Sort = lapply(1:DO, function(i) sample(X, N, replace=F))  
        Sort_mean <- mapply(mean, Sort)
        
        ## 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언어 데이터프레임 airquality
    # 여기서 1,2가 아닌 3월 1일, 7월 7일 형태로 출력하려면 어떻게 해야 하나요?
    
    library(dplyr)
    
    air = data.frame(airquality)
    
    air %>%
        dplyr::filter(
            (Month == 3 & Day == 1) | (Month == 7 & Day == 7)
            )
    
    
    # 과제 중에 스크립트를 논리형으로 변환하여 z_logic에 저장하라고 하는데 무슨 말인가요?
    
    nVal = c(94, NA)
    
    z_logic = as.logical(nVal)
    
    z_logic
    
    # r studio를 이용해서 정적분과 함수의 극한값 구하는 법 좀 알려주세요ㅠㅠㅠㅠ
    # 아님 잘 설명해주는 유튜브 영상같은 게 있으시다면 추천 부탁드립니다
    
    # 정적분
    fn = function(x) {x^2 + 4*x + 1}
    
    integrate(fn, lower = 0, upper = 3)
    
    
    # 그 밑에부분을 다 실행시켜보면 하나같이
    # Error in empty(.data) : 객체 'tips'를 찾을 수 없습니다
    # 이런 오류가 계속 뜹니다ㅠ
    # 어디가 잘못된걸까요? 
    
    # 설치 시에 발생된 문제로 판단됩니다.
    
    # plyr 라이브러리 삭제 
    unlink(paste0(Sys.getenv('R_LIBS_USER'), '/plyr'), recursive=TRUE)
    
    # 재 설치
    install.packages('plyr')
    
    
    # d<-data.frame(x=1:10,fac=fac,z=10:20)Error in data.frame(x = 1:10, fac = fac, z = 10:20) :   arguments imply differing number of rows: 10, 11
    # 이게 대체 무슨 뜻인가요ㅜ
    # 오류가 자꾸 떠요
    
    fac = 30:40
    
    d = data.frame(
      x = c(1:11)
      , fac=c(fac)
      , z = c(10:20)
      )
    
    d
    
    # x<-1:100
    # sum(x>50)
    # 이렇게 출력해봤는데
    # 50이라는 답이 나왔습니다.
    # 그런데 왜 이렇게 나오는지 이해가 안가서 질문합니다!
    # 자세히 설명부탁드려요!
    
    x <- 1:100
    
    nIndex = which(x > 50)
    
    nIndex
    
    # 객체들의 합
    sum(x[nIndex], na.rm = TRUE)
    
    
    # R studio 한글을 써서 저장시킨뒤 다시 키면 한글이 모두 '?'로 표시되어 있습니다 .
    # utf-8로 설정되어있구요.. 어떤게 문제일까요
    
    # 이 경우 EUC-KR로 저장한 소스 코드를 UTF-8로 변환 시 발생되는 문제입니다.
    # 따라서 EUC-KR로 설정한 후 소스 코드를 복사 후 UTF-8로 다시 붙여넣기해야 합니다.
    
    
    # 다음의 문제를해결하기 위한 R 코드를 작성하시오 (which 함수 사용)
    
    library(dplyr)
    
    # iris 데이터셋에서 꽃잎의 길이 (Petal.length)가 가장 큰 관측값 (행)의 내용을 보이시오.
    iris %>%
      dplyr::filter(Petal.Length == max(Petal.Length, na.rm = TRUE))
    
    # iris 데이터셋에서 꽃잎의 폭 (Petal.Width)이 0.3~0.4 사이인 관측값 (행)들의 내용을 보이시오.
    iris %>%
      dplyr::filter(between(Petal.Width, 0.3, 0.4))
    
    # v1에서 짝수에 대해서만 2를 곱하여 저장하시오.
    v1 <- 51:90
    
    nIndex = which(v1 %% 2 == 0)
    
    nVal = v1[nIndex] * 2
    
    nVal
    
    
    # v1에서 7의 배수들을 제거한 후 v1의 내용을 출력하시오.
    v1 <- 51:90
    
    nIndex = which(v1 %% 7 != 0)
    
    nVal = v1[nIndex]
    
    nVal
    
    # 다음은 영업 사원들의 판촉 전화 건수와 판매 건수이다.
    
    dfData = data.frame(
      nKey = c(18, 40, 20, 30, 10, 10, 20, 21, 24, 30)
      , nVal = c(42, 66, 42, 54, 30, 30, 46, 49, 43, 63)
      )
    
    # R을 이용하여 판촉 전화 건수의 평균과 분산을 구하는 프로그램을 작성하고 프로그램과 결과를 캡쳐하여라.
    
    mean(dfData$nKey, na.rm = TRUE)
    var(dfData$nKey, na.rm = TRUE)
    
    # R을 이용하여 판촉 전화 건수의 히스토그램을 그리는 프로그램을 작성하고 프로그램과 결과를 캡쳐하여라.
    
    hist(dfData$nKey)
    
    # R을 이용하여 산점도를 그리고 상관계수를 구하는 프로그램을 작성하고 프로그램과 결과를 캡쳐하여라.
    
    plot(dfData$nKey, dfData$nVal)
    cor(dfData$nKey, dfData$nVal)
    
    # r프로그래밍 오류 질문이요 ㅠㅠ
    # 이거 왜 오류가 뜨나요 ㅠㅠ 저 파일을 불러오기 했는데 자꾸 저렇게 뜨고 다른게 안되요 ㅠㅠ
    
    data = read.csv(file = "INPUT/csv exam.txt", sep = " ", header = FALSE)
    
    data
    
    # 
    
    library("KoNLP")
    
    # 1. 1에서 10000 사의의 수에서 짝수만을 가지고 벡터 객체 생성하시오. 그리고 벡터 객체의 모드를 확인하시오
    
    val = 1:10000
    
    index = which(val %% 2 == 0)
    
    val[index]
    
    
    # 2. (4.2, 6.3, 5.1, 7.2, 10.1, 9.9, 4.0, 15.5)를 숫자형 벡터 객체 만드시오.
    # 그리고 이 숫자형 벡터 객체를 사용하여 세번째 수와 여섯번째 수를 결측치로 바꾸시오. 그리고 벡터 객체의 모드를 확인하시오(단 R에서의 결측치 처리는 NA로 해야 합니다. 예를 들어 y<-NA 로 하면 y스칼라가 결측치입니다.
    
    val2 = c(4.2, 6.3, 5.1, 7.2, 10.1, 9.9, 4.0, 15.5)
    val2[3] = NA
    val2[6] = NA
    
    val2
    
    # 예를 들어서, 초단위로 부하율 값이 나타내는 CSV파일이 있는데 
    # 이것을 초단위의 데이터 평균내서 1분단위로 나타내는 데이터 값을 새로 추가하고싶을때는 어떻게 코딩을 해야하나요 ?
    
    library(dplyr)
    
    dfData = data.frame(
        Time = c("45:55.4", "45:56.4", "46:57.5", "46:57.8", "47:59.3")
        , Load = c(24, 65, 95, 65, 95) 
        )
    
    dfDataL1 = dfData %>%
        dplyr::mutate(
            dtTime = readr::parse_time(as.character(Time), format = "%M:%OS")
            , sMinute = lubridate::minute(dtTime)
            , sSec = lubridate::second(dtTime)
        )
    
    dplyr::tbl_df(dfDataL1)
    
    dfDataL2 = dfDataL1 %>%
        dplyr::group_by(sMinute) %>%
        dplyr::summarise(nMeanLoad = mean(Load, na.rm = TRUE))
    
    dplyr::tbl_df(dfDataL2)
            
    # 10명의 몸무게를 저장한 벡터가 다음과 같을 때 질문을 해결하기 위한 R코드를 작성하시오.
    
    weight <- c(69, 50, 55, 71, 89, 64, 59, 70, 71, 100)
    
    # (1) 몸무게가 가장 큰 값은 몇 번째에 있나?
    which(weight == max(weight, na.rm = TRUE))
    
    # (2) 몸무게가 가장 작은 값은 몇 번째에 있나?
    which(weight == min(weight, na.rm = TRUE))
    
    # (3) 몸무게가 61에서 69사이인 값들은 몇 번째에 있나?
    which(61 <= weight & weight <= 69)
    
    # (4) 몸무게가 60 이하인 값들만 추출하여 weight.2에 저장하고 내용을 보이시오.
    weight.2 = which(weight <= 60)
    weight.2
    
    # R csv불러올때 한글 깨지는데 어떻게 해야할까요? 한글을 영어로 불르면 잘 불러와지는데 한글로 하면 깨져서 와요ㅠㅠㅠㅠ
    
    data = read.csv("INPUT/출산율.csv", encoding = "utf-8")
    data = read.csv("INPUT/출산율.csv", encoding = "cp949")
    data = read.csv("INPUT/출산율.csv", encoding = "euc-kr")
    
    # R데이터 y=2x^+5x+10에 대해 x가 각각 6,8,10일때 y의 값을 각각 구한다.'
    # 이문제인데 자꾸 오류가 나요 ㅠ ㅠ 
    
    x = c(6, 8, 10)
    y = (x^2) + (5 * x) + 10
    y
    
    # 
    library(evir)
    
    data(danish)
    
    evir::records(danish)
    
    # 
    data = scan("INPUT/csv exam.txt", what = "character")
    data
    
    dataL1 = read.csv(file = "INPUT/csv exam.txt", sep = " ", header = TRUE)
    dataL1
    
    # 그래서 이것을 다시 받아서 출력하려고 2번째 사진같이 입력하여 출력하였는데 보시는것처럼 '유효하지 않은 멀티바이트 문자열 3입니다' 라는 말과 함께 출력이 되질 않아 계속 시도해봐도 도저히 해결을 못하겠어서 질문드립니다..ㅠㅠ
    
    data = read.csv(file = "INPUT/csv exam.txt", sep = " ", header = TRUE)
    data
    
    # 압축 파일 'Rstat.zip'의 압축을 풀었는데 R에서 R stat라고 불리는 패키지가 없다고 해서 질문드립니다.
    # 패키지를 설치하려면 어떻게 해야 하는 건가요?
        # 빠르게 답변해주시면 감사하겠습니다.
    
    # library(stats)
    
    # stats::
        
    # (1:10)^c(1,2)를 계산하면
    # [1] 1 4 3 16 5 36 7 64 9 100이 나오는데 어떤 원리로 계산된건가요?
    
    (1:10)^c(1,2)
    
    # 좌측 1  ^ 우측 1 = 1
    # 좌측 2  ^ 우측 2 = 4
    # 좌측 3  ^ 우측 1 = 3
    # 좌측 4  ^ 우측 2 = 16
    # 좌측 5  ^ 우측 1 = 5
    # 좌측 6  ^ 우측 2 = 36
    # 좌측 7  ^ 우측 1 = 7
    # 좌측 8  ^ 우측 2 = 64
    # 좌측 9  ^ 우측 1 = 9
    # 좌측 10 ^ 우측 2 = 100
    
    # 난수 구할 때 U(-3.3) 이랑 DE(0.1) 구하려면 어떻게 쳐야 하나요ㅠㅠ
    
    iNumber = 1000000
    
    # 0-1 사이 난수 구하기
    nVal = runif(iNumber)
    hist(nVal)
    
    # 정규분포에서 난수 생성
    nVal2 = rnorm(n = iNumber, mean = 0, sd = 1)
    hist(nVal2)
    
    # R에서 제공하는 swiss 데이터셋은 스위스 47개 주의 경제 자료를 포함하고 있다. 이 데이터셋에 대해서 다음 문제를 해결하기 위한 코드를 작성하시오.
    
    library(dplyr)
    
    dfData = swiss
    
    # (1) 데이터셋의 요약 정보를 보이시오.
    summary(dfData)
    
    # (2) 남성의 농업인 비율(Agriculture)이 가장 높은 주를 보이시오.
    dfData %>%
      tibble::rownames_to_column() %>%
      dplyr::filter(Agriculture == max(Agriculture, na.rm = TRUE))
    
    # (3) 남성의 농업인 비율(Agriculture)을 내림차순으로 정렬하여 주의 이름과 함께 보이시오.
    dfData %>%
      tibble::rownames_to_column() %>%
      dplyr::arrange(desc(Agriculture))
    
    # (4) 카톨릭 신자의 비율(Catholic)이 80% 이상인 주들의 남성의 농업인 비율(Agriculture)을 보이시오.
    
    dfData %>%
      tibble::rownames_to_column() %>%
      dplyr::filter(Catholic >= 80)
    
    # [R]markdown을 word로 생성하는데 오류가 뜨네요ㅠㅠ
    # output file: -2.knit.mdUnknown option -2.Unknown option -..Unknown option -u.Try pandoc.exe --help for more information.에러: pandoc document conversion failed with error 2실행이 정지되었습니다
    # 혹시 어떻게 해결해야하는지 아시나요??ㅠㅠ
    
    library(rmarkdown)
    render("input.Rmd", word_document())
    
    # specify an option for syntax highlighting
    render("input.Rmd", word_document(highlight = "zenburn"))
    
    # 다음 문제를 해결하기 위한 R 코드를 작성하시오. ( which( ) 함수 사용 ) (4 points)
    
    # (1) iris 데이터셋에서 꽃잎의 길이(Petal.Length)가 가장 큰 관측값(행)의 내용을 보이시오.
    index = which(iris$Petal.Length == max(iris$Petal.Length, na.rm = TRUE))
    
    iris[index, ]
    
    # (2) iris 데이터셋에서 꽃잎의 폭(Petal.Width)이 0.3~0.4 사이인 관측값들의 내용을 보이시오.
    index = which(0.3 <= iris$Petal.Width & iris$Petal.Width <= 0.4)
    
    iris[index, ]
    
    
    # 4번문제 어떻게 푸나요? ㅠㅠ 제발 알려주세요
    
    x = c(6, 8, 10)
    y = (2 * (x^2)) + (5 * x) + 10
    
    y
    
    
    # 1에서 50 사이의 정수 중에서 3이나 5의 배수를 순서대로 모두 찾아 v3벡터를 만드시오.
    
    var = 1:50
    
    index = which((var %% 3 == 0) | (var %% 5 == 0))
    
    v3 = var[index]
    
    v3
    
    # 0-5
    # 5-10
    # 10-15
    # ~~
    # 45-55
    # 이렇게 10개의 표가 5의 간격으로 있을때 이거를 R프로그램을 이용해서 도수분포표를 만드는 명령어 좀 알려주세요..
    
    library(tidyverse)
    
    data = read.csv(file = "INPUT/zipIncome.csv")
    
    var = data %>% 
        select(MeanEducation, MeanHouseholdIncome) #pick the variable 
    
    # set up cut-off values 
    breaks = seq(0, 50, 5)
    
    # specify interval/bin labels
    tags = paste0("[", seq(0, 45, 5), "-", seq(5, 50, 5), ")")
    
    # bucketing values into bins
    group_tags = cut(var$MeanEducation, breaks = breaks, include.lowest = TRUE, right = FALSE, labels=tags)
    
    # inspect bins
    summary(group_tags)
    
    ggplot(data = as_tibble(group_tags), mapping = aes(x = value)) + 
        geom_bar(fill="bisque",color="white",alpha=0.7) + 
        stat_count(geom = "text", aes(label=sprintf("%.4f",..count../length(group_tags))), vjust=-0.5) +
        labs(x = 'mean education per house') +
        theme_minimal() 
    
    # 
    # 1.R 스튜디오 에서 log(1:5)  함수 입력하면
    # 밑이 e? 2? 인  함수 값으로 계산 되는건가요 ????
    
    log(1:5)
    
    
    # 2.exp(1:5)  <<< 이거 뭔지 잘 모르겠어요 자세히 설명좀요 , 지수함수 인가요
    
    exp(1:5)
    # 2.718282 ^ (1:5)
    
    # R언어 소스코드 및 실행결과좀 부탁드려요 처음이라 잘 모르겠네요..ㅜ
    # 5) 1부터 100사이에 있는 정수를 생성하고 그 결과를 x에 할당하라.
    
    x = 1:100
    
    x
    
    # 6) 5)에서 생성한 백터 x의 원소 수를 구하라.
    
    length(x)
    
    # 7) 5)에서 생성한 백터 x의 원소들의 합, 평균, 표준편차를 구하고, 그 결과를
    # x_sum, x_mean, x_std변수에 저장하라.(sum(), mean(), sd() 함수를 이용하라.)
    
    x_sum = sum(x, na.rm = TRUE)
    x_mean = mean(x, na.rm = TRUE)
    x_std = sd(x, na.rm = TRUE)
    
    x_sum
    x_mean
    x_std
    
    # 벡터의 크기가 9이고 벡터의 원소 중 처음 다섯 개는 1부터 10까지 홀수 값, 그 다음 네 개는 8부터 1까지 짝수 값을 갖는 벡터를 생성하는 법좀 가르쳐쥬세요 r프로그래밍 ㅠㅠ
    # 벡터의 모양은 1 3 5 7 9 8 6 4 2 가 되도록!
    
    
    evenVar = 1:8
    oddVar = 1:10
    
    evenIndex = which(evenVar %% 2 == 0)
    oddIndex = which(oddVar %% 2 == 1)
    
    val = c(oddVar[oddIndex], rev(evenVar[evenIndex]))
    
    val
    
    # Rstudio에서 C:/R/csv1.csv R폴더 안의 csv1.csv파일 여는 방법좀 알려주세요ㅠㅠ 사진처럼 하니까 안돼요
    
    setwd("E:/02. 블로그/지식iN")
    
    data = read.csv("INPUT/출산율.csv")
    
    data
    
    # 실행이 된 거 아닌가요?근데 왜 함수를 찾을 수 없다고 뜨는건가요?
    library(readxl)
    
    readxl::read_excel
    
    # factor를 이제 막 배우고 있는데요
    # 1을 하나, 2를 둘, 3을 셋 으로 바꾸려고 하는데
    # 왜 안먹히는지 잘 모르겠어요 ㅠㅠㅠㅠ 뭔가요 제발알려주세요
    
    library(plyr)
    
    a = c(1, 2, 3, 3, 2, 1)
    
    faData = factor(data)
    
    rsData = plyr::mapvalues(faData, from = c(1:3), c("하나", "둘", "셋"))
    
    rsData
    
    table(rsData)
    
    # csv 파일을 불러와서 하는데 행의 이름이 한글로 되어 있습니다. 
    # 그래서 하나하나 이렇게 해보는데 어떤 경우에는 저런 메시지가 뜨고 어떤 경우는 그냥 정상으로 넘어갑니다.
    # 이 메시지의 의미는 무엇이며 왜 이런것이 뜨는지 알고 싶습니다. 
    
    data = read.csv("INPUT/출산율.csv", encoding = "utf-8")
    data = read.csv("INPUT/출산율.csv", encoding = "cp949")
    data = read.csv("INPUT/출산율.csv", encoding = "euc-kr")
    
    # 2. 1의 조건에서 sepal.width와 sepal.length의 중앙값과 species의 종류별 개수를 구하시오.
    # 1번은 됐는데 2번이 안 되네요ㅜㅜ 2번할때 어떤 함수(median, subset?)와 수식, 구하는 법을 알려주세요
    
    median(iris$Sepal.Width, na.rm = TRUE)
    median(iris$Sepal.Length, na.rm = TRUE)
    
    table(iris$Species)
    
    # 
    # R에서 while이랑 repeat 각각 중첩하여 사용해서 이 삼각형 나오게 하고 싶은데 어떻게 해야하나요ㅜ C언어나 자바, 파이썬으로 하는 건 많이 나오는데 R로 어떻게 하는지는 안나오네요ㅜㅜㅜㅜ
    # R 고수님들 부탁드립니다!
    
    i = 1
    number = 10
    while (i < number) {
        cat(rep("*", times = number - i), "\n")
        
        i = i + 1
    }
    
    # 1.PC에 R 프로그램을 설치하고 아래 계산들을 한 후 R consol화면을 캡쳐하여 한글파일로 제출하라.
    
    # 1+2*3+4*5+6을 계산하라
    1+2*3+4*5+6
    
    # (1+2)*3+4*(5+6)을 계산하라
    (1+2)*3+4*(5+6)
    
    # ((1+2*3)+4)*5+6을 계산하라
    ((1+2*3)+4)*5+6
    
    # 2.벡터의 크기가 9이다. 벡터의 원소 중 처음 다섯 개는 1부터 10까지 홀수 값, 그 다음 네 개는 8부터 1까지 짝수 값을 갖는 벡터를 생성하라.  
    # 벡터의 모양은  1 3 5 7 9 8 6 4 2 가 된다. 
    evenVar = 1:8
    oddVar = 1:10
    
    evenIndex = which(evenVar %% 2 == 0)
    oddIndex = which(oddVar %% 2 == 1)
    
    val = c(oddVar[oddIndex], rev(evenVar[evenIndex]))
    
    val
    
    # 문제를 어떻게 푸는지 모르겠어요ㅠ
    # 1. x는 1부터 100까지의 수 중 3의 배수만 포함하고 y는 1부터 100까지의 수 중 5의 배수만 포함하는 벡터를 만들어라.
    
    var = 1:100
    
    index = which((var %% 3 == 0) | (var %% 5 == 0))
    
    var[index]
    
    # 2. x와 y의 교집합을 구하고, 해당 교집합에 포함된 수를 모두 합한 값을 구하여라. 
    
    index = which((var %% 3 == 0) & (var %% 5 == 0))
    
    var[index]
    
    sum(var[index], na.rm = TRUE)

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

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

    • sangho.lee.1990@gmail.com

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

    • saimang0804@gmail.com

     

     

     

     

     

     

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