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

 정보

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

 

love-3061483_1280.jpg

 

[기능]

  • 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

 

 

 

 

 

 

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