정보
-
업무명 : R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 (3)
-
작성자 : 이상호
-
작성일 : 2020-04-30
-
설 명 :
-
수정이력 :
내용
[특징]
-
네이버 지식iN에서 R 프로그래밍 관련 답변을 위해서 체계적인 소스 코드 현행화가 요구되며 이 프로그램은 이러한 목적을 달성하기 위한 소프트웨어
-
추가로 2020년 02월 21일 및 03월 30일 현행화 버전을 보내드리오니 참고하시기 바랍니다.
[기능]
-
R 프로그램 관련 "질문&답변 (Q&A)" 소개
-
"#"를 기준으로 질문에 대한 답변 및 "소스 코드" 첨부
[활용 자료]
-
질문자가 제공하신 입력 자료 (.sav, .xlsx, .txt, .csv)
[자료 처리 방안 및 활용 분석 기법]
-
없음
[사용법]
-
소스 코드 참조
[사용 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
본 블로그는 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'자기계발 > 지식iN·문의사항' 카테고리의 다른 글
[지식iN] R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 (4) : 2020년 06월 07일 (4) | 2020.06.07 |
---|---|
[지식iN] R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 (2) : 2020년 03월 30일 (0) | 2020.04.30 |
[지식iN] R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 : 2020년 02월 21일 (0) | 2020.02.21 |
[지식iN] R 프로그래밍 문의 (0) | 2019.09.26 |
[지식iN] 자바스크립트 프로그래밍 문의 (0) | 2019.09.26 |
최근댓글