반응형

     정보

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

    • 작성자     : 이상호

    • 작성일     : 2020-04-30

    • 설   명      :

    • 수정이력 :

     

     내용

    [특징]

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

    • 추가로 2020년 02월 21일 03월 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

     

     

    [기능]

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

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

       

    [활용 자료]

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

    INPUT.z01
    10.00MB
    INPUT.zip
    2.38MB

     

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

    • 없음

     

    [사용법]

    • 소스 코드 참조

     

    [사용 OS]

    • Window 10

     

    [사용 언어]

    • R v4.0

    • R Studio v1.2.5042

     

     소스 코드

    [네이버 지식iN]

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

     

    [전체]

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

    • 2020년 04월 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)
    #===============================================================================================
    
    # 각 A,B,C,D의 4명의 신입사원 데이터를 토대로 상자그림을 그려야합니다
    # 완성된 상자그림, 프로그램에 사용된 코드와 실행결과도 같이 부탁드립니다
    
    data = data.frame(
        A = c(2,4,4,3,2,3,4,5,1,5)
        , B = c(3,4,3,4,5,4,4,5,5,4)
        , C = c(3,3,3,4,4,3,2,3,3,2)
        , D = c(3,2,2,3,4,3,4,5,5,2)
        )
    
    boxplot(data)
    
    # 제가 Rcmdr을 실행시켜야되는데..
    # 저렇게 뜹니다ㅠㅠㅠ 방법좀알려쥬세요
    
    library(Rcmdr)
    
    Rcmdr::activateMenus()
    
    # 어떻게 하는지 모르겠어요! 자꾸 오류떠서.. 하는 법 알려주세요!
    x = c(6, 8, 10)
    y = (2* (x^2)) + (5 * x) + 10
    y
    
    # r스튜디오로 워드클라우드를 만들었는데 plot 창에 워드클라우드가 전체가 나오지않고 일부만 잘려 나와요 어떻게 해결하나요??
    
    # 
    v1 <- 51:90
    
    v1
    
    index = which(v1%%2==0)
    
    v2 = 2 * v1[index]
    
    # 
    png(file = paste0("Img01.png"), 1200, 600) 
    
    plot(1:10)
    
    dev.off()
    
    #R스튜디오 설치했는데 맨 처음의 4분할 화면이 안 뜨네요ㅜㅜ
    # 메모장 하나만 켜집니다
    # 프로그램 두개 다 설치했습니다 어디서 에러가 난 걸까요? 
    
    # 다음의 자료는 대학교 2020학년도에 기초통계학을 수강한 20명의 시험결과이다.
    # 69 78 89 94 50 93 98 81 73 88 78 84 68 90 83 87 81 74 58 69
    
    # (1)계급간격이 5일 때, 도수분포표를 작성하시오.
    
    # set up cut-off values 
    breaks = seq(0, 100, 5)
    
    # specify interval/bin labels
    tags = paste0("[", seq(0, 95, 5), "-", seq(5, 100, 5), ")")
    
    data = c(69, 78, 89, 94, 50, 93, 98, 81, 73, 88, 78, 84, 68, 90, 83, 87, 81, 74, 58, 69)
    
    groupTags = cut(data, breaks = breaks, include.lowest = TRUE, right = FALSE, labels=tags)
    
    summary(groupTags)
    
    # (2)히스토그램을 작성해 보시오.
    # 1번 문제 도수분포표는 해결했는데, 히스토그램을 도저히 모르겠네요..ㅠㅠ
    
    ggplot(data = as_tibble(groupTags), mapping = aes(x = value)) + 
        geom_bar(fill="bisque",color="white",alpha=0.7) + 
        stat_count(geom = "text", aes(label=sprintf("%.2f",..count../length(group_tags))), vjust=-0.5) +
        labs(x = 'score per group') +
        theme_minimal() 
    
    # 
    # R프로그램(R스튜디오아님)으로 그래프를 그릴려는데 명령어를 잘 모르겠습니다,,
    # 이게 히스토그램을 그리는 명령어가 맞나요?
    # 이걸 입력하고 엔터를 치면 +가 나오고 그림은 나오지 않습니다..
    # 다른 블로그에서는 새 스크립트를 누르고 입력하라던데 그래도 그래프는 나오지않더군요
    # ㅠㅠ도와주세요
    
    score = c(69,78,89,94,50,93,98,81,73,88,78,84,68,90,83,87,81,74,58,69)
    
    hist(score, breaks = seq(50, 100, 5), prob = TRUE)
    
    # R 프로그래밍 d에서 3의 배수 만 출력 하세요. 
    # d <-100:200 기준
    
    var = 100:200
    
    index = which(var %% 3 == 0)
    
    var[index]
    
    # 
    # install.packages("readx1") 이걸 깔려고 하는데 오류 메세지로 
    # install.packages("readx1")
    # Installing package into ‘C:/Users/ksmin/Documents/R/win-library/3.6’
    # (as ‘lib’ is unspecified)
    # Warning in install.packages :
    # package ‘readx1’ is not available (for R version 3.6.3)
    # 이렇게 떠요. 어떻게 해야 해결할 수 있나요?
    
    library(readxl)
    
    readxl::anchored()
    
    # 
    # 다음과 같은 name벡터에서 성과 이름을 분리하여 각각 sname, fname에 따로 저장하라.
    # name <- c("Lee Nayoung", "Song Hyekyo", "Jun Jihyun", "Kime Tahee")
    # 답변해주신다면 정말 감사드립니다.
    
    library(tidyr)
    
    name <- c("Lee Nayoung", "Song Hyekyo", "Jun Jihyun", "Kime Tahee")
    
    data = as.data.frame(name) %>%
        tidyr::separate(name, c("sname", "fname"), sep = " ")
    
    data
    
    # 
    # group<-read.table("C:/myfiles/dataset.txt", header=T)
    # group
    # names(group)
    # plot(group$X, group$Y, pch=11, cex=2, col="red")
    # 여기서 산점도의 점을 별모양으로 하고 그 안을 빨간색으로 채우고 싶은데 어떻게 입력해야 하나요
    
    
    group = data.frame(
        X = 1:10
        , Y = 1:10
        )
    
    plot(group$X, group$Y, pch=24, cex=2, bg="red", col="red")
    points(group$X, group$Y, pch=25, cex=2, bg="red", col="red")
    
    # R언어 도와주세요 ... 급해요ㅠ
    #연습문제 12
    #x와 y의 공분산을 계산하시오.
    
    #공분산
    x <- c(420, 610, 625, 500, 400, 450, 550, 650, 480, 565)
    y <- c(2.80, 3.60, 3.75, 3.00, 2.50, 2.70, 3.50, 3.90, 2.95, 3.30)
    cov(x, y)
    
    #(2)x와 y의 상관계수를 계산하시오.
    
    #상관계수 
    cor(x, y)
    
    #결정계수
    R2 = cor(x, y)^2
    
    #(3)최소자승법에 의한 직선식이 y=a+bx로 나온다고 할 때, a와 b의 값을 결정하시오.
    
    #최소자승법
    # win.graph(9, 6)
    plot(formula=y~ x,
         main="homework",
         xlab="엑스",
         ylab="와이",
         xlim=c(420,565),
         ylim=c(2.80,3.30),
         col="red")
    grid()
    
    line <- lm(formula=y ~ x)
    abline(line)
    
    # ▲▲▲▲ 여기까지는 잘 되는 것 같아요 ㅜㅜ
    # 그런데 밑에 직선식이 안돼요 도와주세요 ㅠㅠ
    # ▼▼▼▼ 밑에 식을 이용해서 답을 구해주세요 .. 
    
    text(440, 3.3, 
         labels=paste0("Y = ", round(line$coef[[1]], 3), " + (", round(line$coef[[2]], 3),
                       ") * X"), col=2)
    text(430, 3.25, labels=paste0("R2 = ", round(R2,4)), col="red")
    
    # R studio 로 자료구조 pop,push 구현 어떻게 하나요ㅠㅠ
    # 간단하게라도 부탁드립니다!
    
    library(flifo)
    
    
    # push
    push = function(x, values) (assign(as.character(substitute(x)), c(x, values), parent.frame()))
    
    # pop
    pop = function(x) (assign(as.character(substitute(x)), x[-length(x)], parent.frame()))
    
    # example
    z = 1:3
    
    push(z, 4)
    
    pop(z)
    pop(z)
    
    # V1~V5 까지의 변수를 합한후 평균내서 V10에 저장하려는데 V10<-(V1+V2+V3+V4+V5)/5 로 했는데 
    # 요인(factors)에 대하여 의미있는 ‘+’가 아닙니다. 라는 오류가 뜨네요 어떻게 해결할수 있을까요
    V1 = factor(1)
    V2 = factor(2)
    V3 = factor(3)
    V4 = factor(4)
    V5 = factor(5)
    
    as.numeric.factor = function(x) {as.numeric(levels(x))[x]}
    
    as.numeric.factor(V1)
    
    V10 <- sum(
      as.numeric.factor(V1)
      , as.numeric.factor(V2)
      , as.numeric.factor(V3)
      , as.numeric.factor(V4)
      , as.numeric.factor(V5)
      , na.rm = TRUE
      ) / 5.0
    
    V10
    
    # R프로그래밍으로 역행렬 구하기 , 오류가 나옵니다.
    
    A <- matrix(nrow=3,ncol=3)
    A
    
    A[1,1] <-1/sqrt(3)
    A[1,2]<-1/sqrt(3)
    A[1,3]<-1/sqrt(3)
    A[2,1]<-1/sqrt(2)
    A[2,2]<-1/sqrt(2)
    A[2,3]<-0
    A[3,1]<-1/sqrt(6)
    A[3,2]<-1/sqrt(6)
    A[3,3]<-2/sqrt(6)
    
    A
    
    # 3X3이라는 A행렬을 만들었습니다.
    # 그후에 역행렬을 얻기 위해 solve(A)를 해보았지만 결과가 오류가 나옵니다. 뭐가 잘못된건가요?
    # 혹시나 해서 디터미넌트를 구해봤는데 0도 아니었습니다.
    
    library(MASS)
    
    MASS::ginv(A)
    
    # X <- (1:10)*10
    # 60이상인 값들의 평균을 구해야 하는데요
    # mean 함수를 사용하고, 사용하지 않고 둘 다 구해야해요
    # 도대체가 어떻게 하는지 모르겠어요 도와주세요
    
    X <- (1:10)*10
    
    index = which(X >= 60)
    
    mean(X[index], na.rm = TRUE)
    
    # iris 자료로 그래프를 나타내려고 하는데 막대그래프로 나타내려고 하거든요ggplot2에서 종별 sepal.width sepal.length petal.width petal.length를 세로로? 세워서 어떻게 놓을까요..지금은 저렇게 일자로 점이 찍히는데
    
    library(tidyr)
    library(ggplot2)
    
    data = tidyr::gather(iris, key, val, -Species)
    
    ggplot(data = data, aes(x = Species, y = val, fill = key)) +
      geom_bar(stat="identity", position="dodge") 
    
    # R스튜디오 파이차트 변환하는중 요류 ....
    # library(readxl)
    # data <-read_excel("C:/scv123.xlsx")
    # x <-c("456","510 ","1092","81","260","912","2075","162","1078","1035","810","200","550","490","469","429","1311","729","102","165","612","1520","850","660")
    # label<-c("강남구","강동구","강북구","강서구","관악구","광진구","구로구","금천구","노원구","도봉구","동대문구","동작구","마포구","서대문구","서초구","성동구","성북구","송파구","양천구","영등포구","용산구","은평구","종로구","중구")
    
    # pie(x,labels=label,main="서울특별시 구별 도서관수")
    # Error in pie(x, labels = label, main = "서울특별시 구별 도서관수") : 
    #   'x'의 값은 반드시 양수이어야 합니다
    # 파이차트로 변화하고  마지막 문장만 오류가 나네요.. 마지막 문장이 양수여야 한다디 ...먼말이죠 ..
    
    x <- c(456,510 ,1092,81,260,912,2075,162,1078,1035,810,200,550,490,469,429,1311,729,102,165,612,1520,850,660)
    
    label <- c("강남구","강동구","강북구","강서구","관악구","광진구","구로구","금천구","노원구","도봉구","동대문구","동작구","마포구","서대문구","서초구","성동구","성북구","송파구","양천구","영등포구","용산구","은평구","종로구","중구")
    
    pie(x, labels = label, col=rainbow(length(label)), main="서울특별시 구별 도서관수")
    
    # 
    get_sun <- function(loc,st,ed){
      
      if(!require(readxl)){
        install.packages("readxl")
      }
      if(!require(httr)){
        install.packages("httr")
      }
      library(readxl)
      library(httr)
      if(is.character(st) && length(grep("-",st))!=0){
        temp <- unlist(strsplit(st,"-"))
        sy <- as.numeric(temp[1])
        sm <- as.numeric(temp[2])
        
      } else {
        sy <- as.numeric(substr(st,1,4))
        sm <- as.numeric(substr(st,5,6))
      }
      
      if(is.character(ed) && length(grep("-",ed))!=0){
        temp <- unlist(strsplit(ed,"-"))
        ey <- as.numeric(temp[1])
        em <- as.numeric(temp[2])
      }else{
        ey <- as.numeric(substr(ed,1,4))
        em <- as.numeric(substr(ed,5,6))
      }
      
      URL_1 <- "https://astro.kasi.re.kr/life/sunmoon/excel?location="
      URL_2 <- URLencode(iconv(loc,to="UTF-8"))
      URL_3 <- "&date="
      nt <- 1
      while(sy!=ey || sm!=em+1){
        URL_4 <- sy
        URL_5 <- ifelse(nchar(sm)==1,paste0("0",sm),sm)
        URL <- paste0(URL_1,URL_2,URL_3,URL_4,URL_5)
        cat(URL, "\n")
        GET(URL, write_disk("temp.xlsx", overwrite=TRUE))
        if(is.null(nt)){
          temp_sun <- data.frame(read_xlsx("temp.xlsx",skip=1))
          temp_df <- rbind(temp_df,temp_sun[,c(1,3,5)])
          
        }
        else{
          temp_df <- data.frame(read_xlsx("temp.xlsx",skip=1))[,c(1,3,5)]
          nt <- NULL
        }
        if(sm+1>12){
          sm <- 1
          sy <- sy+1
        }
        else{
          sm <- sm+1
        }
      }
      file.remove("temp.xlsx")
      temp_df <- cbind(temp_df,loc,stringsAsFactors=F)
      names(temp_df) <- c("날짜","일출","일몰","지역")
      return(temp_df)
    } 
    
    get_sun("서울특별시", "2017-10", "2018-06")
    
    
    # https://astro.kasi.re.kr/life/sunmoon/excel?location=%EC%84%9C%EC%9A%B8%ED%8A%B9%EB%B3%84%EC%8B%9C&date=202003
    
    # 100에서 200으로 구성된 벡터d를 생성하여~~~ d의 끝에서 10개의 값을 잘라내어 출력하시오 <<< 이게 문제인데 
    # d[-c(190:200)]를 대입하니 이상하게 나오더라구요. 혹시 틀린 코드인가요?
     
    d = 100:200
    
    endIndex = length(d)
    
    result = d[(endIndex - 10):endIndex]
      
    result
    
    # 이부분에서 > for( jj in 1:4){ date.tank<-rbind(date.tank,te[[jj]])} 부분이 어떤식으로 되어있길래 위와 같은 것으로 print되는것인지 모르겠습니다. 자세히 알려주세요ㅠㅠㅠㅠ
    
    date.te<-c('2018-03-01/01','2019-03-02/04','2017-03-01/04','2015-03-02/05')
    
    date.tank = NULL
    
    for(jj in 1:length(date.te)){
        
        te <- unlist(strsplit(date.te[jj],'/'))
        
        cat(te)
        
        date.tank <- rbind(date.tank,te)
    }
    
    #
    # name=c("Kim", "Lee", "Park") 이 부분에서
    # 왜 <- 안쓰고 =를 사용한건가요?
        # name <- c(" ")
    # age <- c( ) 한 다음
    # x <- data.frame(name, age) 해야되는거 아닌가요?ㅠㅠ
    
    # 안녕하세요. R프로그램을 처음 사용해보는 학생입니다.
    # R프로그램에서 정규분포 곡선을 그릴때 문의사항이 있어 질문 올립니다.
    # 사진과 같이 curve 명령문을 적으면 에러가 뜨는데 이유가 뭔지 궁금합니다 ㅜㅜ 
    # 그리고 에러가 안뜨게 정규분포 곡선을 추가하려면 어떤 식으로 적어야하나요?
    
    y = c(47, 50, 48, 55, 60, 52, 53, 55, 48, 63)
    
    hist(y, breaks = 46:63, freq = FALSE)
    lines(dnorm(1:100, mean = mean(y), sd = sd(y)), col = "blue")
    
    # R에 내재된 데이터인 "mtcars"를 이용해 누적막대그래프를 그리는 건데요.
    # ggplot(mtcars,aes(x=factor(cyl)))+geom_bar(aes(fill=factor(gear)))
    # 요렇게 해서 누적막대 그래프를 그리는 것을 성공했습니다. 사진은 아래와 같구요.
    # 근데 궁금한게 제가 쓴 코드에서 fill이 무엇인지 알고 싶습니다. 
    
    # 여기서 fill은 기어 (gear)에 따른 색깔 표시 (범례 참조)를 의미합니다. 즉 fill을 넣지 않을 경우 기어에 따라 동일한 색으로 표시
    
    library(ggplot2)
    
    ggplot(mtcars, aes(x = factor(cyl))) +
        geom_bar()
    
    # 1.R 패키지에 있는 'mtcars ’ 데이터를 이용하여 자동차 중량 (wt ) 대 연비
    # (mpg) 의 plot 그래프를 그려라
    
    library(ggplot2)
    library(dplyr)
    
    glimpse(mtcars)
    
    ggplot(mtcars, aes(x = wt, y = mpg)) +
        geom_point()
    
    # 2.다음은 한 주 동안 상위 25 위까지 기록된 영화의 총 수입에 대한 자료
    # 이다 단위 백만원 ). 이 자료에 대하여 밀도로 표시되는 히스토그램을
    # 그려라
    # 29.6 28.2 19.6 13.7 13.0 7.8 3.4 2.0 1.9 1.0 0.7 0.4 0.4 0.3 0.2
    
    # 이 문제들이 오답인데요 왜 틀린지가 이해가 안되서 아시는분 그래프들 좀 주세요..ㅠ
    
    data = data.frame(
        val = c(29.6, 28.2, 19.6, 13.7, 13.0, 7.8, 3.4, 2.0, 1.9, 1.0, 0.7, 0.4, 0.4, 0.3, 0.2)
        )
    
    ggplot(data, aes(x = val)) + 
        geom_density(color = "darkblue", fill = "lightblue")
    
    # 교수님께서 R만 사용하라고 하셔서 R studio는 못 쓰는 상황입니다.
    # csv 파일을 불러오려 하는데 한 셀에 들어 있는 문자열 하나 빼고는 숫자입니다. 그런데 계속 Coffees라는 그 문자열이 계속 깨지는데 원인도 모르겠고 해결이 안되어 질문드립니다..ㅠㅠ 도대체 왜 자꾸 이런 현상이 발생하는 건가요?
    
    # 이는 파일 읽을 경우 인코딩 타입을 미 설정하여 발생된 오류 입니다.
    # 따라서 encoding를 설정해주시면 됩니다 (소스 코드 참조).
        
    data = read.csv("INPUT/출산율.csv", encoding = "utf-8")
    data = read.csv("INPUT/출산율.csv", encoding = "cp949")
    data = read.csv("INPUT/출산율.csv", encoding = "euc-kr")
    
    # 다음 코드를 이용해 지도를 그렸는데요 color을 white로 했는데 왜 핑크색으로 그려질까요? 제가 잘못하는거면 올바른 코드 아시는분 가르침 부탁드립니다.
    ggplot() +
        geom_polygon(data=merge_result, aes(x=long, y=lat, group=group, fill=area, color='white'), alpha=.8) +
        labs(fill="19년 시군별 경지면적")
    
    
    ggplot() + 
        geom_polygon(data=merge_result, aes(x=long, y=lat, group=group, fill=area), colour = "white", alpha=.8) +
        labs(fill="19년 시군별 경지면적")
    
    
    # anorexia Treat "Cont"로 정규성 검정하기
    # 1) shapiro.test()로 를 하기 
    
    data = rnorm(100, mean = 5, sd = 3)
    
    shapiro.test(data)
    
    # 2) t.test() paired t-test .
    
    
    # Data in two numeric vectors
    # ++++++++++++++++++++++++++
    
    # Weight of the mice before treatment
    before = c(200.1, 190.9, 192.7, 213, 241.4, 196.9, 172.2, 185.5, 205.2, 193.7)
    
    # Weight of the mice after treatment
    after = c(392.9, 393.2, 345.1, 393, 434, 427.9, 422, 383.9, 392.3, 352.2)
    
    # Create a data frame
    data = data.frame( 
        group = rep(c("before", "after"), each = 10),
        weight = c(before,  after)
    )
    
    t.test(weight ~ group, data = data, paired = TRUE)
    
    # 이거 코딩 어떻게쳐요?ㅠㅠ
    
    # 
    # KOR ENG ATH HIST SOC MUSIC BIO EARTH PHY ART
    
    # 90 85 73 80 85 65 78 50 68 96
    
    # (1) 위 데이터를 score 벡터에 저장하시오(과목명은 데이터 이름으로 저장).
    
    data = data.frame(
        key = c("KOR", "ENG", "ATH", "HIST", "SOC", "MUSIC", "BIO", "EARTH", "PHY", "ART")
        , val = c(90, 85, 73, 80, 85, 65, 78, 50, 68, 96)
        )
    
    # (2) score 벡터의 내용을 출력하시오.
    
    score = data$val
    score
    
    # (3) 전체 성적의 평균과 중앙값을 각각 구하시오.
    
    mean(score, na.rm = TRUE)
    median(score, na.rm = TRUE)
    
    # (4) 전체 성적의 표준편차를 출력하시오.
    
    sd(score, na.rm = TRUE)
    
    # (5) 가장 성적이 높은 과목의 이름을 출력하시오.
    
    index = which(score == max(score, na.rm = TRUE))
    
    data[index, ]
    
    # (6) 다음 조건을 만족하는 위 성적에 대한 히스토그램을 작성하시오. (그래프 제목: 학생 성적, 막대의 색: 보라색)
    
    hist(score, main = "학생 성적", col = "violet")
    
    # 
    library(lubridate)
    
    # 변수 전체 삭제하는 명령어가 위와 같다고 알고 있는데
    # 
    # 1. ls()는 현재 전체 변수 변환 명령
    # 2. list에 전체 변수 대입
    # 3. list가 chr type인데 remove 인것 같은데
    # 
    # 질문
    # rm(aaa=ls()) 혹은
    # list=ls()
    # rm(list) 와 같은 명령어는 왜 동작하지 않을까요??
    #     
    #     rm(list=ls())가 세부적으로 왜 이렇게 동작하는지
    # 설명 해 주실 전문가 님 계실까요??
    
    list = ls()
    list
    
    rm()
    
    # 문자열 (char)를 제외한 모든 열을 가져오려고 하는 것을 어떻게 사용해야하나요,,?
    # df %>% select(., ) %>% show()
    # 이렇게 썼는데 어떻게 해야 문자열을 제외한 모든열을 가지고 올 수 있게 할 수  있을까요??
    
    library(dplyr)
    
    mtcars %>%
        select_if(is.numeric) %>%
        glimpse()
    
    mtcars %>%
        select_if(is.character) %>%
        glimpse()
    
    
    # Error in file(file, "rt") : 커넥션을 열 수 없습니다
    # 추가정보: 경고메시지(들):
    #     In file(file, "rt") :
    #     파일 '학생키몸무게등'를 열 수 없습니다: No such file or directory
    # 
    # 
    # 라고 오류가 뜹니다.
    # 
    # 
    # getwd() 로 작업위치 확인하고 그 폴더에 파일 넣고 해보기도하고
    # setwd()로 직접 경로 지정하고 시도해봐도 안되고(c드라이브, d드라이브, 바탕화면, r실행시켰을때 지정되어있는 장소 전부 시도했습니다. 그때마다 그 위치에 있는 파일 속성 눌러서 경로확인하고 복붙하고 혹시몰라서 파일 이름까지 복붙해서 실행했습니다.
    # scv파일로 변환할때 잘못한거가 싶어서 다시 시도해도 안되고,
    # 영어만 인식하는가해서 영어이름으로 해도 안됩니다.
    # 
    # 
    # 명령어 입력하는 장면 스크린샷으로 정리해서 첨부해드립니다.
    # 
    # 
    # 다른 사람들은 다 되는데 교수님이랑 화면공유상태로 보여드려도 교수님도 모르시고, 해결책을 찾아볼려고 구글을 아무리 뒤져도 경로설정이 잘못됐다는데 이건 아닙니다.
    
    fileDirName = paste0(getwd(), "/", "xxx.csv")
    
    data = read.csv(fileDirName, sep = ",", header = TRUE)
    
    # 데이터 R에 hflights가 있는데 이게 21열 227496행으로 구성되있음 19열이 취소된비행편인데 취소는 1 취소X는 0인데 여기서 1의 개수를 확인하는 함수가 있다면 뭔가요
    
    library(dplyr)
    library(hflights)
    
    hflights %>%
        dplyr::group_by(Cancelled) %>%
        dplyr::summarise(n = n())
    
    # r프로그램 잘 아시는 분 도와주세요 ㅠㅠ 계속 freq 입력하고 나면 멀쩡히 있던 막대그래프가 사라져요 ... 뭐가 문제ㄹ까요 대체 내공 1000걸ㅓ요 대학 과제인데 최대한 빨리 답변 부탁드려요ㅠㅠ
    
    
    data = c(10, 11, 8, 5, 4, 6, 8, 10, 13)
    
    hist(data, breaks = 4:13, freq = FALSE)
    lines(dnorm(1:100, mean = mean(x), sd = sd(x)), col = "red")
    
    
    # R프로그램에서 iris데이터를 사용해서 산점도 그린 코드입니다. 여기서 마지막에 범례를 추가할때 
    # Species에 해당하는 범주는 점(pch) 그리고 abline을 선(lty)로 표현해서 한 범례 박스안에 넣는 방법이 궁금합니다 ㅠㅠ
    
    data = seq(-pi, pi, 0.01)
    
    plot(data, sin(data), type = 'l', xlab = "xlab", ylab = "ylab")
    points(data, cos(data))
    
    legend("topright"
           , c("sin", "cos", "Y = aX + b")
           , col = c("black", "black")
           , pch = c(1, NA, NA)
           , lty = c(NA, 1, 2)
           , cex = 0.8
    )
    
    # 2번을 어떻게 해야하는지 모르겠내요. 가능하면 2~6다 궁금합니다.
    getCount(100, 3)
    
    getCount = function(n, x) {
        
        data = c(1:n)
        
        index = which((data %% x) == 0)
        
        return (length(index))
    }
    
    # 대한민국, 중국, 일본 세 나라의 1인당 국내총생산과 기대 수명을 전체 관측 기간에 걸쳐 나란히 출력하세요.
    # continent를 제외한 열(변수)들을 나라별로 연도가 가장 최근 데이터부터 나타나게 출력하세요.
    
    library(gapminder)
    
    data = data.frame(gapminder)
    
    data %>%
      dplyr::filter(country %in% c("Korea, Rep.", "Japan", "China")) %>%
      dplyr::arrange(country, desc(year)) %>%
      dplyr::select(-continent, -pop)
    
    
    data %>%
      dplyr::group_by(year, continent) %>%
      dplyr::summarise(sumPop = sum(as.numeric(pop), na.rm = TRUE)) %>%
      tidyr::spread(key = continent, value = sumPop) %>%
      dplyr::filter(Africa > Europe) %>%
      dplyr::select(year, Africa)
    
    
      
    # 안녕하세요 r질문드립니다.
    # n<-3 m <- matrix(1:30, ncol=3) m
    # m[sample(nrow(m), n),]
    # question.
    # How could you select n random rows from a matrix m where every selected row should be adjacent with increasing order?
    
    # 선택한 모든 행이 증가하는 순서와 인접 해야하는 행렬 m에서 n 개의 임의 행을 어떻게 선택할 수 있습니까?
    
    n = 3 
    m = matrix(1:30, ncol = 3)
    
    # Lets create the train and test data set 
    ind = sample(1:nrow(m), n) 
    
    trainData = m[ind, ] 
    testData = m[-ind, ]
      
    trainData
    testData
    
    # 이 문제들을 r studio를 통해 r코드로 풀어야 해요
    # 도와주세요 내공 100 드립니다!
    
    # 어느 대학교에 입학하는 학생 중 20명을 뽑아서 졸업후 진로에 대한 희망을 조사한 결과 다음의 자료를 얻었다. SAS를 이용하여 다음 물음에 답하여라.
    
    data = data.frame(
      no = 1:20
      , val = c(1, 2, 2, 3, 1, 3, 1, 2, 4, 2, 3, 1, 1, 3, 3, 1, 2, 3, 4, 1)
      )
    
    dataL1 = data %>%
      dplyr::mutate(type = case_when(
        val == 1 ~ "대학원"
        , val == 2 ~ "취직"
        , val == 3 ~ "해외유학"
        , val == 4 ~ "군입대"
        , TRUE ~ "null"
      ))
    
    # 도수분포표
    table(dataL1$type)
    
    # 원형 그래프
    dataL1 %>%
      dplyr::group_by(type) %>%
      dplyr::summarise(number = n()) %>%
      ggplot(aes(x = "", y = number, fill = type)) +
      geom_bar(width = 1, stat = "identity") +
      coord_polar("y", start = 0) +
      blank_theme +
      theme(axis.text.x=element_blank()) +
      geom_text(aes(y = number/4 + c(0, cumsum(number)[-length(number)]), 
                    label = paste0(number, "명") ), size = 5) 
    
    
    # 막대그래프
    ggplot(dataL1, aes(x = val, fill = type)) +
      geom_histogram(aes(y = stat(count)/sum(count)), binwidth = 1, alpha = 0.6) +
      scale_y_continuous(labels = scales::percent)
    
    
    # R프로그래밍 관련 질문입니다.
    # 만약 다음행렬이 있으면
    # 1열 2열 3열
    # [1,]            과자        새우깡       1400원
    # [2,]      아이스크림      투개더     2000원
    # [3,]          과자           뻥튀기     1600원
    # 과자 -> 새우깡 -> 1400원
    # 아이스크림 -> 투개더 -> 2000원>
    # ↘ 뻥튀기 1600원
    # 이런식으로 네트워크(그래프)를 만들고 싶은데 어떻게 해야할까요??
    
    library(igraph)
    library(tidygraph)
    
    data = data.frame(
      from = c("과자", "새우깡", "아이스크림", "투개더", "과자", "뻥튀기")
      , to = c("새우깡", "1400원", "투개더", "2000원", "뻥튀기", "1600원")
      )
    
    dataL1 = as_tbl_graph(data)
    
    plot(dataL1)
    
    
    # X<-1:100
    # sum(x > 50)
    # 이거 정답이 왜 50인가여
    # Sum이니까 51부터 100까지 더해야하는거 아닌가요?
    
    x = 1:100
    
    # TRUE의 총 개수를 의미
    sum(x > 50)
    
    # TRUE에 대한 인덱스 추출
    ind = which(x > 50)
    
    sum(x[ind], na.rm = TRUE)
    
    # x의 변수를 1부터 15까지 만들고, y의 변수는 –1부터 14까지 만드시오.
    # (프로시저를 써주세요)
    x = 1:15
    y = -1:14
    
    # 2. x의 제곱근에 대한 결과를 쓰시오.
    sqrt(x)
    
    # 3. y와 원주율을 곱한 결과를 쓰시오.
    y*pi
    
    # 4. x와 y의 기술통계에 대한 결과를 쓰시오.
    summary(x)
    summary(y)
    
    # 5. 산점도를 그리시오
    # (x의 난수는 1500, y의 난수는 1500으로 만들어 산점도를 그리시오.)
    xAxis = runif(1500)
    yAxis = runif(1500)
    
    plot(xAxis, yAxis)
    
    # v1<-51:90
    # v1에서 7의배수들의 값을 0으로 변경하라는 문제인데....
    # v1[v1%%==0]<-0
    # 여기서 뭘 어떻게더 바꿔야 할 지 모르겠습니다.
    # 도와주세요ㅠㅠㅠ
    
    v1 = 51:90
    
    ind = which(v1 %% 7 == 0)
    
    v1[ind] = 0
    
    v1
    
    # 
    A = 10
    B = 12
    C = 2
    
    data = c(A, B, C)
    
    
    # 1) 세 변수 A,B,C에 각각 값을 대입하고 세 변수 중 가장 큰 수와 가장 작은 수를 출력하는 프로그램을 작성하시오
    
    getMaxMinVal = function(data) {
      
      # 가장 큰 수 
      maxVal = max(data, na.rm = TRUE)
      
      # 가장 작은 수 
      minVal = min(data, na.rm = TRUE)
      
      return (c(maxVal, minVal))
    }
    
    getMaxMinVal(data)
      
    
    # 최대공약수
    pracma::gcd(2, 24)
    
    
    # 두가지 문제인데 어떻게 하면 될까요 ㅠㅠ
    
    
    # 행동위험요인 시스템은 매년 미국에서 시행되는 대규모 전화 설문 조사이다.
    # 이 조사에서는 응답자들의 현재 건강 상태 및 그들의 건강과 관련된 생활 습관 등을 조사한다.
    # 이 조사에 관한 자세한 내용은 BRFSS의 웹사이트에서 확인할 수 있다.
    # 주어진 자료는 2000년도에 시행된 20000명의 BRFSS 조사 데이터의 일부이며 전체 200개 이상의 항목 중에서 간추린 9개의 항목을 포함하고 있다. 
    # inch로 되어 있는 신장을 cm로 바꾸고 pound로 되어 있는 체중을 kg으로 바꿔 새로운 변수를 만든 뒤 아래 물음에 답하시오.
    
    library(readtext)
    library(measurements)
    library(dplyr)
    library(ggplot2)
    library(ggpubr)
    
    data = read.csv("INPUT/cdc.txt", sep = " ", header = TRUE)
    
    dataL1 = data %>%
        dplyr::mutate(
            heightCm = conv_unit(height, "inch", "cm")
            , weightKg = conv_unit(weight, "lbs", "kg")
            , wtdesireKg = conv_unit(wtdesire, "lbs", "kg")
            , diff = wtdesireKg - weightKg
            , genderType = case_when(
                gender == "m" ~ "남성"
                , gender == "f" ~ "여성"
                , TRUE ~ "NULL"
                ) 
            )
    
    # 1. genhlth 변수에 대해 적절한 방법을 이용하여 요약해보자.
    table(dataL1$genhlth)
    
    # 2. height 변수와 이 변수를 cm로 바꾼 변수에 대한 수치적 요약 값을 구해보자
    summary(dataL1$height)
    summary(dataL1$heightCm)
    
    # 두 변수의 평균과 분산을 각각 구하시오. 구해진 값을 가지고 평균과 분산의 성질에 관하여 설명하시오.
    mean(dataL1$height, na.rm = TRUE)
    mean(dataL1$heightCm, na.rm = TRUE)
    var(dataL1$height, na.rm = TRUE)
    var(dataL1$heightCm, na.rm = TRUE)
    
    # 3. weight_kg 변수와 wtdesire_kg 변수의 산점도를 그려보고 두 변수 사이에는 어떠한 관계가 존재한다고 보여지는지 기술하시오.
    
    ggscatter(dataL1, x = "weightKg", y = "wtdesireKg", add = "reg.line") +
        stat_cor(label.x = 5, label.y = 300) +
        stat_regline_equation(label.x = 5, label.y = 275) + 
        theme_bw()
    
    # 두 변수의 상관계수를 구해보고 산점도와 연결하여 기술하시오.
    cor(dataL1$weightKg, dataL1$wtdesireKg)
    
    # 4. wtdesire_kg-weight_kg를 계산하여 새로운 변수를 만들어보자. 이 변수의 분포는 어떠한가? 
    # 수치적 요약과 그래프 요약을 통해 살펴보자. 이것이 의미하는 바를 무언인지 기술하시오.
    
    # 수치적 요약
    summary(dataL1$diff)
    
    # 그래프 요약
    hist(dataL1$diff)
    
    # 5. age 변수를 이용하여 히스토그램을 그려보자. 그리고 구간의 수를 50, 100으로 바꿔가며 동일한 히스토그램을 그린 후 비교해보자
    
    # 구간의 수 : 50
    breaks = seq(1, 100, length.out = 50)
    
    groupTags = cut(dataL1$age, breaks = breaks, include.lowest = TRUE, right = FALSE)
    
    ggplot(data = as_tibble(groupTags), mapping = aes(x = value)) + 
        geom_bar(fill="bisque",color="white",alpha=0.7) + 
        stat_count(geom = "text", aes(label=sprintf("%.2f",..count../length(groupTags))), vjust=-0.5) +
        labs(x = 'score per group') +
        theme_minimal() +
        theme(axis.text.x = element_text(angle = 45, hjust = 1))
    
    
    # 구간의 수 : 100
    breaks = seq(1, 100, length.out = 100)
    
    groupTags = cut(dataL1$age, breaks = breaks, include.lowest = TRUE, right = FALSE)
    
    ggplot(data = as_tibble(groupTags), mapping = aes(x = value)) + 
        geom_bar(fill="bisque",color="white",alpha=0.7) + 
        stat_count(geom = "text", aes(label=sprintf("%.2f",..count../length(groupTags))), vjust=-0.5) +
        labs(x = 'score per group') +
        theme_minimal() +
        theme(axis.text.x = element_text(angle = 45, hjust = 1))
    
    # 6. height_cm의 상자그림을 그리되 신장은 성별에 따라 차이가 있으니 성별로 나눠서 상자그림을 2개 그리시오.
    ggplot(dataL1, aes(x = genderType, y = heightCm, fill = genderType)) +
        geom_boxplot()
    
    # corrplot에 cor 을 색과 숫자로 표기하고 싶은데 , p-value가 0.05가 넘으면 색이 아닌 숫자만 지우고 싶습니다. 어떻게 해야 할까요?
    require(Hmisc)
    require(corrplot)
    
    corData = Hmisc::rcorr(as.matrix(mtcars))
    
    corMat = corData$r
    pMat = corData$P
    
    corrplot(corMat, type = "upper", order = "hclust", method = "number",
             p.mat = pMat, sig.level = 0.05, insig = "blank")
    
    # 
    # 아래 식까지 해봤는데 오류뜨네요. 왜 그런지 아시나요?
        
    df_fruit = data.frame(
        fruit = c("사과", "딸기", "수박")
        , money = c(1800, 1500, 3000)
        , income = c(24, 38, 13)
        )
    
    df_fruit
    
    # r 스튜디오 질문인데요
    # 오렌지 데이터 세트 를 출력해서  age가 1000 이상이면서 circumference가 140이하인 데이터를 추출해circle1에 할당하고,circle1의 age의 합과 circumference 평균값을 구해보자.을 구해보라는데요
    # 에초에 데이터세트 출력(오렌지) 를 어케하는질모르겟어요 답변좀욧
    
    library(dplyr)
    
    circle1 = as.data.frame(Orange) %>%
        dplyr::filter(
            age >= 1000
            , circumference <= 140
            )
    
    circle1
    
    # circle1의 age의 합
    sum(circle1$age, na.rm = TRUE)
    
    # circle1의 circumference 평균값
    mean(circle1$circumference, na.rm = TRUE)
    
    # month <- 1:12
    # name <- month.name  
    # (Months <- data.frame(month,name)) 
    # "1월", "2월", ....."12월","None"을 값으로 갖는 열 namek를 추가하시오. 
    # Months <- data.frame(Months, data.frame(namek= 까지는 알겠는데 1월2월~12월 none는 어떻게 추가하나요.
    
    library(lubridate)
    
    monthVal = 1:12
    
    namek = lubridate::month(monthVal, label = TRUE, abbr = FALSE)
    
    namek
    
    # R스튜디오에서 어떤 식을 넣고 돌려도 객체를 찾을 수 없다고만 뜨네요.
    
    # x3 <- c(1, 2, 3)
    # x3
    
    # 이런 간단한 식도 [1] 1 2 3으로 안 나오고 객체 x3을 찾을 수 없습니다 라고 떠요.
    # 어디가 문제인가요?
    
    x3 = c(1, 2, 3)
    
    ls.str()
    
    # [1] 2 2 2 2 2
    # [1] 3 3 3
    # [1] 4
    # [1] 3
    # [1] 2 2 2
    # [1] 1 1 1 1 1
    # 을 만들거나 이게 5회 반복되어있는 형태는 만드는 방법을 알겠는데
    # 각 행의 숫자 반복을 지정하려면 어떻게 해야하나요?
        
    rowVal = c(2, 3, 4, 3, 2, 1)
    repVal = c(5, 3, 1, 1, 3, 5)
    
    for (i in 1:length(rowVal)) {
        cat(rep(rowVal[i], repVal[i]), "\n")
    }
    
    # 
    # R스튜디오를 공부한지 얼마 안됐는데요
    # 엑셀에 있는 데이터들을 R로 불러와서 데이터프레임의 형식으로
    # 어떻게 만드나요?ㅠㅠ
    
    # R에서 직접 데이터프레임 만드는건 알겠는데
    # 엑셀에 있는 데이터를 R에서 데이터프레임으로 만드는 법을 모르겠네요..
    
    # 우선은
    # library(readxl)
    # dat <- read_excel("파일")
    # View(dat)
    
    # 이렇게 해서 다른 창으로 표만 볼 수 있는 상태인데
    # 이거 각각 데이터들을 아래 Console에서 보려면 어떻게 해야하나요?!
    
    library(dplyr)
        
    data = read.csv("INPUT/cdc.txt", sep = " ", header = TRUE)
    
    # 모든 보기
    data
    
    # 열 기준으로 요약 보기
    dplyr::tbl_df(data)
    
    # 행 기준으로 요약 보기
    dplyr::glimpse(data)
        
    # 이렇게 한글이 이상하게 뜹니다. 어떻게해야하나요?
    
    data = read.csv("INPUT/출산율.csv", encoding = "utf-8")
    data = read.csv("INPUT/출산율.csv", encoding = "cp949")
    data = read.csv("INPUT/출산율.csv", encoding = "euc-kr")
    
    # 
    # df.x 라는 데이터의 address_sigungu의 변수에 저런 내용들이 있는데요
    # 청주서원구라는 내용을 서원구로 바꾸는것은 어떻게 식을세워야 하나요?
    # 내공 100드리겠습니다 ㅠㅠ 알려주세요
    
    library(dplyr)
    library(stringr)
    
    data = data.frame(
        name = c("청주서원구", "청주청원구", "청주흥덕구")
        )
    
    dataL1 = data %>%
        dplyr::mutate(
            nameNew = stringr::str_replace(name, "청주", "")
        )
        
    dataL1
    
    # A 라는 데이터 세트에서 ab의 변수 값이 20 이상이면 "P", 20 미만이면 "F" 값으로 A 데이터 세트에 ab20_PF 변수를 생성하려면 어떻게 입력해야 하나요? 
    # ifelse함수가 들어가야 되는건 알지만 계속 인수가 누락 됐다고 나와서요...
    
    library(dplyr)
    
    A = data.frame(
        ab = c(10, 20, 30, 40, 50)
        )
    
    ab20_PF = A %>%
        dplyr::mutate(
            abType = case_when(
                ab >= 20 ~ "P"
                , ab < 20 ~ "F"
                , TRUE ~ "NA"
            )
            
        )
    
    ab20_PF
    
    # 1부터 10까지를 원소로 갖는 벡터 x10 생성하고 반복문을 이용하여 1 다음에 100, 2 다음에 200, ... 등을 추가하시오
    # 혹시 이거 어떻게 하는지 아시는분 계신가요? 급합니다..ㅠㅠ
    
    x10 = 1:10
    
    data = data.frame()
    
    for (i in 1:length(x10)) {
        
        data = dplyr::bind_rows(
            data
            , data.frame(c(i, i *100))
            )
    }
    
    data
    
    # 이 문제만 도저히 모르겠어요.. 살려주세요 
    # 6월달에 발생한 가장 강한 바람(Wind)의 세기를 보이시오.
    
    library(dplyr)
    
    airquality %>%
        dplyr::group_by(Month) %>%
        dplyr::summarise(maxWind = max(Wind, na.rm = TRUE)) %>%
        dplyr::filter(Month == 6)
    
    # 
    library(pracma)
    
    pracma::taylor(sin, x0 = 0, n = 8)

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

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

    • sangho.lee.1990@gmail.com

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

    • saimang0804@gmail.com

     

     

     

     

     

     

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