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

 정보

  • 업무명     : 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

 

 

 

 

 

 

본 블로그는 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음