정보
-
업무명 : R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 (4) : 2020년 06월 07일
-
작성자 : 이상호
-
작성일 : 2020-06-07
-
설 명 :
-
수정이력 :
내용
[특징]
-
네이버 지식iN에서 R 프로그래밍 관련 답변을 위해서 체계적인 소스 코드 현행화가 요구되며 이 프로그램은 이러한 목적을 달성하기 위한 소프트웨어
-
추가로 2020년 02월 21일, 03월 30, 04월 30일에 대한 현행화 버전을 알려드리오니 참고하시기 바랍니다.
[기능]
-
R 프로그램 관련 "질문&답변 (Q&A)" 소개
-
"#"를 기준으로 질문에 대한 답변 및 "소스 코드" 첨부
[활용 자료]
-
질문자가 제공하신 입력 자료 (.sav, .xlsx, .txt, .csv)
[자료 처리 방안 및 활용 분석 기법]
-
없음
[사용법]
-
소스 코드 참조
[사용 OS]
-
Windows 10
[사용 언어]
-
R v4.4.0
-
R Studio v1.2.5042
소스 코드
[네이버 지식iN]
-
"질문&답변 (Q&A)" 소개
[전체]
-
"#"을 기준으로 질문에 대한 답변 및 "소스 코드" 첨부
-
2020년 06월 07일 업로드
# 1.다음의 문제를 해결하기 위한 R코드를 작성하시오
# 10!을 출력하시오.(단,factorial() 함수를 이용하지 않는다.)
sum = 1
for (i in 1:10) {
sum = sum * i
}
sum
# 2.for문을 이용하여 구구단 2단에서 9단까지 출력하는 R코드를 작성하시오.
for (i in 2:9) {
for (j in 1:9) {
cat(i, " * ", j, " = ", i * j, "\n")
}
}
# 3. 1~100의 정수를 차례로 출력하되 3의 배수에서는 숫자 대신 '*'을 출력하는 R코드를 작성하시오(출력은 가로방향으로 한다.)
for (i in 1:100) {
val = ifelse((i %% 3 == 0), "*", i)
cat(paste0(val, " "))
}
# 그래프에 수식으로 된 텍스트를 추가하려고 하는데 계속 에러가 뜹니다ㅠㅠ
# 뭐가 문제인 지 모르겠어요
# 루트2파이 분의 1이라는 수식을 해당 위치에 추가하고 싶은데 계속 에러가 떠요ㅠ 뭐가 문제일까요?
# text(1.5,0.35,expression_(frac(1,sqrt(2*pi)))
plot(1:10, 1:10)
text(1.5, 5.35, expression(frac(1, sqrt(2 * pi))))
#
# 안녕하십니까? 블로그에서 R 프로그래밍에 대해 많은 참조를 하고 있습니다.
# 저는 R을 이용한 통계학을 공부하고 있는 대학원생입니다.
# 표본크기를 2부터 50까지 변화시켜 가며 각 n마다 100개의 표본을 취하여 표본평균을 계산한 것을 시각화해야 하는데, 아무리 생각해도 잘 되지가 않아 메일을 보냅니다.
# 반복문 안에 코드를 완성해야 하는데 조언을 부탁드려도 되겠습니까?
######################################## 모집단 및 표본집단의 평균/분산/표준편차 비교 ##############################
## - 중심극한정리 : 동일한 확률분포를 가진 독립확률 변수 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)) {
for (i in seq(2, 50, 2)) {
DO = 100000 # Number of repetition
N = i # Number of sample
# N = 30
## 비복원 추출(무작위 정렬) : 한번 뽑은 것을 다시 뽑을 수 없는 추출
Sort = lapply(1:DO, function(i) sample(X, N, replace = FALSE))
Sort_mean = mapply(mean, Sort)
# FIG
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")
# 0.1초 지연
Sys.sleep(0.1)
}
# 제가 가지고 있는 데이터셋 내에 있는 변수 (날짜와 시간) 에서 년도만 추출하여 새로운 변수를 만들어야 합니다.
# 전에 지식인에서 답변주신 분이 알려주신대로 strsplit을 아래와 같이 사용했는데요 (hubway_trips_small이 데이터파일이름이고, start_date가 날짜 및 시간으로 되어있는 변수이름입니다)
# 이렇게 하면 year라는 새 변수에 각 년도가 나와야하는데, 아래와 같이 2013년도로만 쭉 나옵니다. 위 코드에서 a와 b라는 새 변수를 만드는 것까지는 잘 된 것 같은데 c부터 한가지로 통일되더니 year에서도 2013년도로 통일되었습니다.
# a와 b까지 잘 된 것 처럼 c에서 그리고 마지막에 year까지 기존 변수의 값들을 유지해서 새 변수를 어떻게 만들 수 있을까요? 고수님들 제발 도와주세요...
# 그리고 저 year변수의 값이 2013 하나인채로, 아래와 같이 모델을 돌렸더니 이런 에러가 뜨는데, 저 변수 내 값이 2013이라는 값 하나뿐이라서 뜨는 에러일까요? year변수를 제대로 잘 만들고 돌리면 괜찮을까요?
library(dplyr)
library(lubridate)
dfData = data.frame(
sDateTime = c("4/13/2013 13:05:00", "5/23/2013 16:24:00", "5/1/2013 15:15:00")
)
dfDataL1 = dfData %>%
dplyr::mutate(
dtDateTime = lubridate::parse_date_time2(sDateTime, orders = "%m/%d/%Y %H:%M:%S")
, year = lubridate::year(dtDateTime)
, month = lubridate::month(dtDateTime)
, day = lubridate::day(dtDateTime)
)
dfDataL1
# 이걸 구하고 싶은데 R에서 오류가 나요 ㅠㅠ 혹시 따로 설치해야하는 패키지가 있나요?
HPR = function(begin.price, end.price, dividend) {
result = (end.price-begin.price+dividend)/begin.price
return(result)
}
prob<-c(0.3,0.4,0.2,0.1)
begin.price<-100
end.price<-c(126.50,110,89.75,46)
cash.dividend<-c(4.5,4,3.5,2)
hpr.value<-HPR(begin.price, end.price, cash.dividend)
hpr.mean<-sum(hpr.value*prob)
hpr.var<-sum((hpr.value-hpr.mean)^2*prob)
df.hpr<-data.frame(hpr.value, hpr.mean, hpr.var)
list(HPR=hpr.value, Mean=hpr.mean, Var=hpr.var)
# R studio 평균구하기
# summarise에서 mean할 경우 NA가 포함되어서 발생한 오류입니다.
# 따라서 mean(공무원.주중, na.rm = TRUE)로 처리하시면 됩니다.
# 안녕하세요 해솔님 저는 R스튜디오를 혼자 공부하는 학생입니다.
# 응용문제를 다운받아서 푸는와중에 답이없는 문제를 발견했고 혼자풀지 못하여 지식인과 구글링을하던중
# 해솔님의 친절하고 이해하기 쉬운 답변을 보게되었습니다.
# 무례하게나마 메일로 질문을 혹시 도오ㅏ주실수있을까하여 연락드립니다.
# 시간이되신다면 도와주실수있을까요? 죄송합니다
# ※ 공공 데이터 포털www.data.go.kr은 공공 기관이 생성·취득하여 관리하는 공공 데이터를 파일·오픈 API·시각화 등 다양한
# 방식으로 데이터를 얻을 수 있는 통합 창구다. 이 곳에 공개되어 있는 방대 한 건강 검진 기록 데이터를 요약하는
# 가공을 해보자.
#
# 위와 같이 [건강검진정보] 다운로드 페이지에서 전체를 선택하여 다운로드한 후 압축을 풀면 2002~2016년의 관측 데이터가 NHIS_OPEN_GJ_2002.csv, NHIS_OPEN_GJ_2003.csv,…, NHIS_OPEN_GJ_2016이라는 파일명으로 기록되어 있다. 본문의 예와 같이 여러 해에 걸친 다양 한 속성의 관측값이 별도의 파일들로 저장되어 있다. 따라서 데이터를 종합적으로 탐색하려면 각 연 도별 데이터를 읽어들여 정제하고 적절히 정리하여 통합하는 가공 과정이 필요하다.
#
# 2. 연도별 데이터 파일을 읽어들여 NHIS2002 ~ NHIS2016라는 변수 이름으로 저장하라.
library(tidyverse)
library(readr)
library(data.table)
fileList = Sys.glob("INPUT/NHIS_OPEN_GJ/*")
data = fileList %>%
purrr::map(data.table::fread) %>%
purrr::reduce(dplyr::bind_rows)
dplyr::glimpse(data)
# 2.데이터 파일과 함께 다운로드된 사용자 매뉴얼 파일의 내용을 참고하여 결측값을 제거하고 각 열의 데이터형을 알맞게 변환하여 정리하라.
# : 데이터 파일에 있는 것 중 사용자 매뉴얼을 확인하시면 해당 결측치 내용이 있을 껍니다. 이에 결측치하시면 되는데. factor 함수를 이용하시면 됩니다.
# factor를 사용하시려면 인스톨로 factor를 하셔야 합니다.
# 성별코드, 5세이하 연령대 코드 시도코도를 확인해보세요.
dataL1 = data %>%
dplyr::mutate_at(vars(성별코드), funs(as.factor)) %>%
dplyr::mutate_at(vars(시도코드), funs(as.factor)) %>%
dplyr::mutate_at(vars(`연령대코드(5세단위)`), funs(as.factor))
dplyr::glimpse(dataL1)
# 4. 2002년 데이터에서 성별, 시도, 연령대 순으로 요약된 통계값을 구하라.
# : 그룹을 정해서 하셔야 하는데 기준은 연도, 성별, 시도, 연령대가 될 것이며
# 각각의 변수들의 평균값을 구해서 통계를 구하시면 됩니다.
dataL2 = dataL1 %>%
dplyr::filter(기준년도 == "2002") %>%
dplyr::select(-가입자일련번호) %>%
dplyr::group_by(성별코드, 시도코드, `연령대코드(5세단위)`) %>%
dplyr::summarise_all(list(mean = mean))
dplyr::glimpse(dataL2)
# 5. 2003~2016년 데이터에서 03 문제와 같은 방법으로 요약된 통계값을 구하라.
# 전체 관측 기간에 대한 요약 통계값을 데이터 프레임 변수 하나에 병합하라.(단, 특정 해의 누락 된 검사 항목은 결측값 으로 표시한다.)
# 문제의 요약 통계값을 데이터 프레임으로 merge 함수를 이용
dataL3 = dataL1 %>%
dplyr::filter(dplyr::between(기준년도, 2003, 2016)) %>%
dplyr::select(-가입자일련번호) %>%
dplyr::group_by(기준년도, 성별코드, 시도코드, `연령대코드(5세단위)`) %>%
dplyr::summarise_all(list(mean = mean)) %>%
# tidyr::gather(key = "key", value = "val")
tidyr::gather(-c(1:4), key = "key", value = "val") # group_by 용도
dplyr::tbl_df(dataL3)
# 안녕하세요 해솔님
# R 코딩을 공부하다가 궁금한게 생겨 지식인을 찾아보던중, 해솔님을 알게되어 블로그를 통해 연락드립니다
# 제가 예제문제를 공부하던중, 잘모르겠는 부분이 있어서요
# 코딩을 해보았긴 했는데 결과값이 잘 안나와 이렇게 죄송함을 무릅쓰고 메일 보냅니다.
# 혹시 도움을 받을 수 있을까 해서요.
# 괜찮으시다면 답변 부탁드리겠습니다
# 감사합니다 ^^
# 1. 다음표는 00회사 직장인을 대상으로 조사한 연봉(Salary)과 근무연수(Year)이다. 성별(Gender)에 따른 연봉차이가 있을 것으로 예상되어 그 차이를 보기위해 한 그래프에 그룹별로 묶어 그리려고 한다.
# *1번문제 표는 맨아래 참고해주세요*
# 1-1. 근무연수에 따른 연봉을 나타내는 산점도 그래프 (x-축 이름: Year, y-축 이름: Salary($), 메인타이틀: Salary difference in gender)
# 1-2. 남성(M)은 초록색 실선으로 연결
# 1-3. 여성(F)은 주황색 점선으로 연결
# 1-4. 좌측 위에 범례 표시 (점선 중 선만 표시)
library(dplyr)
library(ggplot2)
data = data.frame(
Gender = c(1, 1, 2, 2, 2, 1, 1, 2, 2, 1)
, Salary = c(90000, 51000, 60000, 65000, 81000, 93000, 57000, 78000, 44000, 76000)
, Year = c(12, 5, 8, 6, 11, 10, 6, 9, 4, 9)
)
dataL1 = data %>%
dplyr::mutate(type = case_when(
Gender == 1 ~ "M"
, Gender == 2 ~ "F"
, TRUE ~ "null"
))
ggplot(dataL1, aes(x = Year, y = Salary, color = as.factor(Gender))) +
geom_line(aes(linetype = as.factor(Gender))) +
labs(title = "Salary difference in gender")
# 2. 그래프를 생성하여 그룹별로 chull 함수를 이용하여 묶으시오
# 2-1. 표준정규분포를 따르는 난수를 생성하여 matrix(100x2) 로 dot1 에 저장
# 2-2. 구간[0,1]인 일양분포를 따르는 난수를 생성하여 matrix(50x2)로 dot2 에 저장
# 2-3. dot1은 밀도가 15, 선 기울기 각도는 45, 보라색, 다각형으로 묶음
# 2-4. dot2는 밀도가 30, 선 기울기 각도는 30, 금색, 다각형으로 묶음
# 2-5. 그래프 타이틀은 "Random"
# 2-6. 그래프와 겹치치 않게 범례 표시.
# 예를들어서 상관계수가 0~1 까지 데이터로 있을 때 이를 4개로 나눠서 그려야 하는데
# 0.25 간격으로 가시화
library(tidyverse)
library(ggplot2)
data = read.csv("INPUT/full_result1.csv")
dataL1 = data %>%
tidyr::gather(-c(1:2), key = "key", value = "val") %>%
dplyr::filter(key == "cor")
ggplot(dataL1, aes(x = val)) +
geom_histogram(binwidth = 0.05, boundary = 0, closed = "left") +
scale_x_continuous(breaks = seq(0, 1, 0.05))
# 예를들어서 8월 1일 00시, 03시 ... 21시 이렇게 있으면 이걸 전부 묶어서 각 격자에대해서 일 최고기온을 찾아야 되고
# 일 최고기온이 그 격자에서 25도가 넘었으면
# 각 격자별 여름일수 구하기
library(tidyverse)
library(ggplot2)
library(data.table)
# dtDate = seq.Date(as.Date("2020-01-01"), as.Date("2020-12-31"), "1 day")
# sDate = format(dtDate, "%Y%m%d")
# 1일 목록 조회 (20170701)
fileList = Sys.glob("INPUT/KMAPP/*201707*")
data = fileList %>%
purrr::map(data.table::fread) %>%
purrr::reduce(dplyr::bind_rows) %>%
dplyr::select(lon, lat, temp)
dataL1 = data %>%
dplyr::group_by(lon, lat) %>%
dplyr::summarise(
maxTemp = max(temp - 273.15, na.rm = TRUE)
, number = sum(maxTemp > 25)
)
# 안녕하세요.
#
# 해솔님 자료를 보면서 R컴퓨팅을 배우고 있는 직장인 겸 학생입니다.
#
# 혼자 해결이 안되는 질문이 있어서요.
#
# 제가 가지고 있는 데이터는 엑셀형식으로국가별 날짜별 질병의 발생 데이터 인데요. (지금은 csv로 변환하였습니다.)
# (header는 날짜, 발생수, 국가)
#
# 날짜가 01/01/1990 과 같은 방식으로 되어있고,
# 발생수는 숫자
# 국가는 국가명
# 으로 되어있는 데이터 입니다.
#
# 이 데이터를 갖고 특정 몇몇 국가의 질병발생수에 대해 시계열선그래프를 그리고 싶은데요...
#
# 1) 전 세계 국가 중에서 특정 국가 데이터만 어떻게 뽑나요?
# 2) 시계열 데이터를 만들기 위해서는 1990-01-01방식으로 바꿔야하나요?
# 그러면, seq(as.Date)함수를 이용한 후 clind를 하면 되는 건가요??
#
# 혹시 몰라서...
# https://data.europa.eu/euodp/en/data/dataset/covid-19-coronavirus-data/resource/55e8f966-d5c8-438e-85bc-c7a5a26f4863
# 링크를 남김니다.
#
# 너무 어렵네요 ㅜㅜ
# 해솔님 도와주시면 정말 감사하겠습니다!!
# 좋은 주말 되세요
library(dplyr)
library(readxl)
library(lubridate)
library(ggplot2)
# 데이터 읽기
data = read_excel("INPUT/COVID-19-geographic-disbtribution-worldwide.xlsx")
# 데이터 전처리
dataL1 = data %>%
dplyr::filter(countryterritoryCode %in% c("KOR", "JPN", "CHN", "USA")) %>%
dplyr::mutate(dtDate = as.Date(lubridate::parse_date_time2(as.character(dateRep), "%d/%m/%Y"))) %>%
dplyr::arrange(dtDate)
# 가시화
ggplot(dataL1, aes(x = dtDate, y = deaths)) +
geom_point() +
scale_x_date(date_labels = "%Y-%m-%d") +
facet_wrap(~ countryterritoryCode)
# R프로그래밍 Plotly 패키지에 대한 설명을 알려주세요.
# 패키지 설명 , 구성 , 예시 등등 설명부탁드립니다.
# plotly 라는 인터랙티브 charts를 만드는 패키지입니다.
# 또한 시각화 콘텐츠에 접근할 수있는 패키지로서 오픈 소스입니다.
library(plotly)
plot_ly(iris, x = ~Sepal.Length, y = ~Sepal.Width, color = ~Species, type = "scatter")
# 시간_r이라는 함수의 형태인데요 여기서 0부터 23시까지의 시간 각각의 횟수를 더해 열이 시간과 총 횟수 두 개인 데이터 프레임을 만들고 싶은데 어떻게 하면 되나요?
library(dplyr)
data = data.frame(
time = c(1, 2, 3)
, count1 = c(35550, 33881, 38919)
, count2 = c(27888, 27338, 31956)
, count3 = c(20191, 20564, 22811)
)
data %>%
dplyr::group_by(time) %>%
dplyr::summarise_all(
funs(sum(., na.rm = TRUE)
, n())
)
# 네이버 뉴스 속보
library(rvest)
library(stringr)
library(tidyverse)
library(dplyr)
library(magrittr)
Sys.setlocale("LC_ALL", "English")
options(encoding = "UTF-8")
Sys.setenv(LANG = "en_US.UTF-8")
url = "https://news.naver.com/main/list.nhn?mode=LSD&mid=sec&sid1=001&date=20200523&page=222"
getUrlText = function(url, xpath) {
xml2::read_html(url) %>%
rvest::html_nodes(xpath = paste0(xpath)) %>%
rvest::html_text() %>%
str_replace_all(pattern = "\n", replacement = " ") %>%
str_replace_all(pattern = "[\\^]", replacement = " ") %>%
str_replace_all(pattern = "\"", replacement = " ") %>%
str_replace_all(pattern = "\\s+", replacement = " ") %>%
str_trim(side = "both")
}
getUrlHref = function(url, xpath) {
xml2::read_html(url) %>%
rvest::html_nodes(xpath = paste0(xpath)) %>%
rvest::html_attr("href")
}
url = c("https://news.naver.com/main/list.nhn?mode=LSD&mid=sec&sid1=001&date=20200523&page=222")
getUrlText(url, '//*[@id="main_content"]/div[2]/ul[*]/li[*]/dl/dt[2]/a')
# getUrlHref(url, '//*[@id="main_content"]/div[2]/ul[*]/li[*]/dl/dt[2]/a')
url = sprintf("https://news.naver.com/main/list.nhn?mode=LSD&mid=sec&sid1=001&date=20200523&page=%d", seq(1:100))
data = url %>%
purrr::map(~ getUrlText(.x, '//*[@id="main_content"]/div[2]/ul[*]/li[*]/dl/dt[2]/a')) %>%
unlist() %>%
as.data.frame()
#
rep(c(2, 4, 2), each = 3)
rowVal = c(2, 3, 4, 3, 2, 1)
repVal = c(5, 3, 1, 1, 3, 5)
j = 0
i = 0
while (i < length(rowVal)) {
j = 1
repeat {
cat(rep(rowVal[i], repVal[j]), "\n")
j = j +1
if (j > rowVal[j]) {
break
}
}
i = i + 1
}
#
# 안녕하세요 얼마전 R 공부를 시작한 학생입니다
# 조금 막히는 부분이 있어서 질문드립니다.
# str()로 데이터를 확인했을 때
# job int 1 2 1 4 16 1 ...
# 대략 이런식으로 나왔습니다
# 직업이 숫자일리는 없으니 factor형처럼 보이는데 다른 설명이 없어서요
# 1이면 의사 2면 경찰 이런식으로 데이터를 제공하는 사람이 주석을 달아주지 않으면 해석이 불가능한 데이터인가요?
# 아니면 혹시 다른 방법이 있는지..
# 설명을 잘 못해서 어처구니 없는 질문이라고 생각하실 수도 있지만 의견 부탁드립니다 ㅠㅠㅠ
library(dplyr)
library(plyr)
# 일반적으로 의사, 경찰와 같은 문자형으로 변수를 할당할 경우 숫자형/Factor형에 비해 큰 용량을 차지합니다.
# 따라서 숫자형/Factor형으로 나타되면 코드 정보가 꼭 필요합니다.
# 1 : 의사
# 2 : 경찰
data = data.frame(
job = c(1, 2, 1, 4)
)
# 코드 정보 매핑
data %>%
dplyr::mutate(
name = case_when(
job == 1 ~ "의사"
, job == 2 ~ "경찰"
, job == 4 ~ "교사"
, TRUE ~ "null"
)
)
# Factor형으로 매핑
factor = as.factor(data$job)
result = plyr::mapvalues(factor, from = c(1, 2, 1, 4), to = c("의사", "경찰", "교사"))
result
# 정답은 4번인데 이해가 안가는데 해설좀 부탁드립니다..
# 1 2
# 1 1 4
# 2 2 5
# 3 3 6
# 첫째줄 나타내면 위의 매트릭스 형태로 만들어지고
# 둘째줄은 m[2,3&6] 으로 나오는데 왜 4번이죠..ㅜㅜ
m = matrix(1:6, nrow = 3)
m[m[, 1] > 1 & m[ , 2] > 5, ]
# m[, 1] > 1의 경우 1보다 큰 수 (즉 2, 3행)
# m[ , 2] > 5의 경우 5보다 큰 수 (3행)
# 이러한 2 조건의 만족하는 것은 3행입니다.
# 사진의 결과들이 if문으로 해도 나올 수 있게 바꿔야하는데
# 어떻게 하는지 모르겠어요ㅜㅜㅜ
# 저는 계속 오류 아님 경고가 나더라고요ㅜㅜㅜ
iris[iris$Species == "setosa", ]
iris[iris$Sepal.Length > 7.5, ]
iris[iris$Sepal.Length > 5.1 & iris$Sepal.Width > 3.9, ]
iris[iris$Sepal.Length > 7.5, ]
iris[iris$Sepal.Length > 7.6, c(3, 4)]
# 제가 질문한거는 올려주신 결과가
# if문으로 어떻게 입력해야 되는거에요? 였어요ㅜㅜㅜ
for (i in 1:nrow(iris)) {
rowData = iris[i, ]
if (rowData$Species == "setosa") print(rowData)
}
for (i in 1:nrow(iris)) {
rowData = iris[i, ]
if (rowData$Sepal.Length > 7.5) print(rowData)
}
for (i in 1:nrow(iris)) {
rowData = iris[i, ]
if (rowData$Sepal.Length > 5.1 & rowData$Sepal.Width > 3.9) print(rowData)
}
for (i in 1:nrow(iris)) {
rowData = iris[i, ]
if (rowData$Sepal.Length > 7.5) print(rowData)
}
for (i in 1:nrow(iris)) {
rowData = iris[i, ]
if (rowData$Sepal.Length > 7.6) print(rowData[, c(3, 4)])
}
# R언어 평균, 중앙값, 표본분산, 표본표준편차, 변동계수 구해주세요
data = c(54, 57, 55, 23, 51, 64, 90, 51, 52, 45, 15, 10, 82)
# 평균
mean(data, na.rm = TRUE)
# 중앙값
median(data, na.rm = TRUE)
# 표본분산
var(data, na.rm = TRUE)
# 표본표준편차
sd(data, na.rm = TRUE)
# 변동계수
sd(data, na.rm = TRUE) / mean(data, na.rm = TRUE)
# 소수점이였던 변수값들이 ts 적용해서 gdp.time확인하니깐..
# 다 무슨 30이상의 이상한 숫자가 되었습니다.
# 데이터가 안 읽혀서 as.factor로 변경해서 읽혔더니 gdp 까지는 잘 읽었는데 ts적용한 이후부터 값이 멋대로 바뀌었습니다..
# 고수님들 도와주세요..
# ts함수 이용해서 시계열을 그리려고 합니다.
data = read.csv("INPUT/gdpq.csv", header = TRUE)
gdpData = ts(data, start = 1982, frequency = 4)
plot(gdpData[, 1]/1000, ylab = "GDP(조원)", xlab = "연도")
lines(gdpData[, 2]/1000, col = "red")
# R Studio 에서 주식 데이타 정리
# 안녕하세요.
# 우선 아래의 코드를 통해서 주식 데이타를 가져왔습니다.
# 위 코드로 데이타를 받으면
# Open High Low Close Volume AdjClose 이 순서대로 각각의 회사의 데이타를 가져올 수 있습니다.
# 제가 원하는건 Open, High, Low.... 각각의 데이타를 한곳으로 몰고 싶습니다;
# Open (ABG) Open(ACH)...Open(X) High(ABG) High(ACH)...High(X) .....그 외의 것들도 마찬가지로요.
# 간단히 복사하는 코드를 쓸 수도 있을거 같은데 도움 주시면 감사하겠습니다.
참고로
# Low_Raw <- NULL
# for(ticker in tickers)
# Low_Raw <- cbind(Low_Raw, getSymbols(ticker, from = mdate, to = edate, auto.assign = F)[,1])
#
# 이렇게는 오류가 나는 부분이 많아서 못 쓸거 같습니다.
library(quantmod)
library(timetk)
library(dplyr)
library(magrittr)
mdate <- "2016-01-04"
edate <- "2016-03-09"
tickers <- c("ABG","ACH","ADM","AEG","AEM") # 실제는 2000개가 넘는 회사를 다운받습니다.
colName = c("Open", "High", "Low", "Close", "Volume", "Adjusted")
High_Raw = data.frame()
for (ticker in tickers) {
tmpData = getSymbols(ticker, from = mdate, to = edate, auto.assign = F) %>%
as.data.frame() %>%
magrittr::set_names(x = ., value = colName)
High_Raw = dplyr::bind_rows(High_Raw, tmpData)
}
dplyr::tbl_df(High_Raw)
# library(mlbench)
# data(PimaIndiansDiabetes)
# set.seed(100)을 실행한 후 전체 데이터(관측값)에서 임의로 60%를 추출하여
# train에 저장하고 나머지 40%는 test에 저장하라고 나와있는데 찾아보니깐
# sample을 하라고 까지는 찾았는데 어떻게 추출해서 변수에 담을수 있는건지를 모르겠어요
# 해결법좀 알려주세요
library(mlbench)
data(PimaIndiansDiabetes)
set.seed(100)
data = PimaIndiansDiabetes
size = as.integer(nrow(data) * 0.6)
ind = sample(1:nrow(data), size)
trainDF = data[ind, ]
testDF = data[-ind, ]
# 자꾸 이렇게 뜨는데 실행시킬 방법이 없을까요?
# 이유라도 알려주시면 감사하겠습니다.
library(dplyr)
data = data.frame(
만나이 = as.factor(c(10, 20, 30, 40, 50, 60, 70, 80, 100))
)
data %>%
dplyr::filter(as.character(만나이) >= 13)
# Rstudio에서 한글로 작성된 메모장 파일을 readLines("메모.txt")로 불러왔는데 글씨가 다 깨져있네요 ㅠㅠ
# 영어로 해서 저장하면 잘 불러와지는데 한글로 하면 깨져요... 어떻게 해야하나요 ㅠㅠㅠㅠ
readLines(file("INPUT/Memo.txt", encoding = "utf-8"))
readLines(file("INPUT/Memo.txt", encoding = "cp949"))
readLines(file("INPUT/Memo.txt", encoding = "euc-kr"))
# 문제가 이건데 각 대륙의gdpPercap의 평균을 구하려면 어떻게 해야하나요?
# 1. gapminder 데이터에서 각 대륙의 gdpPercap의 평균값을 plotting하고 범례를 추가하시오.
library(gapminder)
library(dplyr)
library(ggplot2)
data = gapminder %>%
dplyr::group_by(continent) %>%
dplyr::summarise(meanGdp = mean(gdpPercap, na.rm = TRUE))
ggplot(data, aes(x = continent, y = meanGdp, colour = continent)) +
geom_point(size = 5)
# 2. gapminder 데이터에서 1952년의 gdpPercap과 lifeExp의 대륙별 평균을 추출한 후, 가로축에는 gdpPercap, 세로축에는 lifeExp를 나타낸 그래프로 ggplot2를 사용하여 시각화 하라.
dataL1 = gapminder %>%
dplyr::filter(year == 1952) %>%
dplyr::group_by(continent) %>%
dplyr::summarise(
meanGdp = mean(gdpPercap, na.rm = TRUE)
, meanLife = mean(lifeExp, na.rm = TRUE)
)
ggplot(dataL1, aes(x = meanGdp, y = meanLife, colour = continent)) +
geom_point(size = 5)
# 보기도 어떻게 너오는지 알려주세요 내공겁니다
A = cbind(c(1, 2, 3), c(4, 5, 6), c(7, 8, 9))
colnames(A) = c("A", "B", "C")
rownames(A) = c("r1", "r2", "r3")
A[ ,"A"]
A[-c(2,3), ]
A[ ,1]
A[ ,-(2:3)]
# 피어슨 상관계수를 계산하는 함수를 완성하시오.
# 함수명 : person_r
# 함수 파라미터 : x 벡터, y 벡터
pearson_r <- function(x, y) {
cor(x, y, method = "pearson")
}
x = mtcars$mpg
y = mtcars$disp
pearson_r(x, y)
pp = read.csv(file = "INPUT/pu.csv")
pp
# **첨부한 csv파일을 활용하였습니다.
# class(pp)
# str(pp)
# pp$"총인구" <- as.integer( pp$"총인구")
# str(mct)
#인구수가 110만이상인 도시 추출
ct <- pp %>%
filter( 총인구 > 1100000 )
# 광역시만 추출
mct<- ct[c(1,2,4,6,8,9,10) , ]
mct
pp <- mct$"총인구"
pp
pc <- mct$"행정구역별"
pc
df <- data.frame( pp, pc)
df
# 아래와 같이 표를 그려봤습니다, 근데 왼쪽에 있는 y축값이 저렇게 뜨는데 어떻게 바꿀수있나요?
library(scales)
ggplot( df, aes( x = pc, y = pp) ) +
geom_bar( stat = "identity", # 막대 높이, y축값
width = 0.5, # 막대 폭
fill = "darkred") +
scale_y_continuous(breaks = seq(0, 10000000, 2500000), labels = scales::comma_format(big.mark = ',', decimal.mark = '.')) +
ggtitle("행정구역별 총인구수")+
theme(plot.title = element_text(size = 25,
face = "bold",
colour = "darkred"))+
labs(x = "행정구역별", y= "총인구수")
# R프로그램에서 웹사이트 크롤링 할때 1월달만 나오지 않고 1~12월까지 나오게 하려면 코드를 어떻게 수정해야 하나요ㅠㅠ
# 알라딘 베스트셀러 2019년 1월 12월 1-200위 크롤링
library(rvest)
library(stringr)
library(tidyverse)
library(dplyr)
library(magrittr)
Sys.setlocale("LC_ALL", "English")
options(encoding = "UTF-8")
Sys.setenv(LANG = "en_US.UTF-8")
getUrlText = function(url, css) {
xml2::read_html(url) %>%
rvest::html_nodes(css = paste0(css)) %>%
# rvest::html_nodes(xpath = paste0(xpath)) %>%
rvest::html_text() %>%
str_replace_all(pattern = "\n", replacement = " ") %>%
str_replace_all(pattern = "[\\^]", replacement = " ") %>%
str_replace_all(pattern = "\"", replacement = " ") %>%
str_replace_all(pattern = "\\s+", replacement = " ") %>%
str_trim(side = "both")
}
dtDateList = seq.Date(as.Date("2019-01-01"), as.Date("2019-12-31"), "1 month")
data = data.frame()
for (i in 1:length(dtDateList)) {
sYear = format(dtDateList[i], "%Y")
sMonth = format(dtDateList[i], "%m")
urlList = sprintf("https://www.aladin.co.kr/shop/common/wbest.aspx?BestType=Bestseller&BranchType=1&CID=0&Year=%s&Month=%s&Week=5&page=%d&cnt=1000&SortOrder=1", sYear, sMonth, seq(1:4))
data = urlList %>%
purrr::map(~ getUrlText(.x, 'a.bo3 > b')) %>%
unlist() %>%
as.data.frame() %>%
dplyr::mutate(
year = sYear
, month = sMonth
) %>%
dplyr::bind_rows(data)
}
dataL1 = data %>%
dplyr::arrange(year, month)
dplyr::tbl_df(dataL1)
# 네이버 뉴스 크롤링
library(rvest)
library(stringr)
library(tidyverse)
library(dplyr)
library(magrittr)
dtDate = seq.Date(as.Date("2019-01-01"), as.Date("2019-12-31"), "1 day")
sDate = format(dtDate, "%Y%m%d")
# Sys.setlocale("LC_ALL")
# options(encoding = "UTF-8")
# Sys.setenv(LANG = "en_US.UTF-8")
getUrlText = function(url, xpath) {
xml2::read_html(url) %>%
rvest::html_nodes(xpath = paste0(xpath)) %>%
rvest::html_text() %>%
str_replace_all(pattern = "\n", replacement = " ") %>%
str_replace_all(pattern = "[\\^]", replacement = " ") %>%
str_replace_all(pattern = "\"", replacement = " ") %>%
str_replace_all(pattern = "\\s+", replacement = " ") %>%
str_trim(side = "both")
}
getUrlHref = function(url, xpath) {
xml2::read_html(url) %>%
rvest::html_nodes(xpath = paste0(xpath)) %>%
rvest::html_attr("href")
}
for (d in sDate) {
print(d)
url = sprintf("https://news.naver.com/main/list.nhn?mode=LSD&mid=sec&sid1=001&date=%s&page=%d",d, seq(1:1500))
data = url %>%
purrr::map(~ getUrlText(.x, '//*[@id="main_content"]/div[2]/ul[*]/li[*]/dl/dt[2]/a')) %>%
unlist() %>%
as.data.frame()
dataL1 <- data %>%
magrittr::set_colnames("title") %>%
dplyr::distinct(title) %>%
dplyr::mutate(date = d)
write.csv(dataL1,paste0("./TITLE/2019/title_",d,".csv"),fileEncoding = "CP949")
}
# R프로그램으로 프로그램짜기
# 주사위 8번 던질때 홀짝 분포를 히스토 그램으로 나타내고 싶습니다.
set.seed(1) # 난수로 생성된 수열을 고정시킴
X = 1:6 # 난수 생성 (모집단 생성)
# hist(X) # 모집단의 빈도분포
# cat(mean(X), var(X), sd(X), "\n") # 모집단의 평균/분산/표준편차
################################################### 표본평균집단에 대해서 ###########################################################
for (i in c(10, 50, 100, 250)) {
DO = 1000 # Number of repetition
# N = i # Number of sample
N = 8
## 비복원 추출(무작위 정렬) : 한번 뽑은 것을 다시 뽑을 수 없는 추출
Sort = lapply(1:DO, function(i) sample(X, N, replace = TRUE))
mapply(function(x, y) seq_len(x) + y,
c(a = 1, b = 2, c = 3), # names from first
c(A = 10, B = 0, C = -10))
Sort
mapply(rep, 1:4, 4:1)
Sort_mean = mapply(mean, Sort)
mapply(mean, Sort)
lapply(Sort, "%%", 2)
## 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 프로젝트 파일 변환 할수있나요?
# R프로젝트 파일 MS 워드나 한글 2020 파일로 나올수있게 변환가능한가요?...
library(officer)
library(ggplot2)
docx = read_docx()
#段落を追加
body_add_par(x = docx, value = "Word Test", style = "Normal", pos = "on")
body_add_par(x = docx, value = paste(1, 3, 5, 99999, 8, collapse = " "), style = "Normal", pos = "after")
cursor_reach(x = TestDocx2, keyword = 99999)
body_remove(x = TestDocx2)
print(TestDocx2, target = "TEST2.docx")
# 임시 표 생성
n = 15
TestData = data.frame(
"Group" = sample(paste0("Group", 1:5), n, replace = TRUE)
, "x" = sample(c(1:100), n, replace = TRUE)
, "y" = sample(c(1:200), n, replace = TRUE)
)
src = tempfile(fileext = ".png")
# 임시 그림 생성
ggplot(TestData, aes(x, y)) +
geom_point() +
ggsave(src)
# 그림 생성
cursor_reach(x = docx, keyword = "TEST")
body_add_img(x = docx, src = src, width = 3, height = 3, style = "centered", pos = "after")
# 테이블 생성
body_add_table(x = docx, value = TestData, style = "Light List Accent 2", pos = "after", first_row = TRUE, first_column = FALSE, last_row = FALSE, last_column = FALSE, no_hband = FALSE, no_vband = TRUE)
print(docx, target = "OUTPUT/Test.docx")
#
library(plyr)
library(dplyr)
data = sample(1:30, 30, replace = TRUE)
tableData = table(data)
aa = as_data_frame(tableData) %>%
dplyr::mutate(val = if_else(as.numeric(data) > 10, 10, 0)) %>%
dplyr::select(data, val) %>%
as.data.frame.table()
dd = table(aa)
library(data.table)
DF = data.frame(x=rep(c("x","y","z"),each=2), y=c(1,3,6), row.names=LETTERS[1:6])
as.data.table(DF)
as.data.table(DF, keep.rownames=TRUE)
as.data.table(DF, keep.rownames="rownames")
# home이라는 데이터셋을 사용하여 문제를 풀라는데 home이라는 데이터셋이 없어요.
# 그럼 home이라는 데이터를 다운받아야되는건가요? 아니면 만들수가 있는건가요?
# 다운받아야되는거라면 위치좀 알려주세요 저도 찾아봤는데 없어요.
# 만들수 있는거라면 어떤식으로 만들어야되는지 알려주세요.
# 처음에는 data.frame으로 하는줄 알았는데 안되서 올립니다.
# 빠른답변좀요.
# library(UsingR)
library(UsingR)
data(home)
home
# 1~30중 4의배수 또는 9의배수일 확률 R로 작성해야하는데
# 뭐가 틀린지 모르겠네요..
S <- c(1:30); S
B <- subset(S, (S %% 4)==0 | (S %% 9)==0); B
length(B)/length(S)
# apply 함수를 이용해서 각 열에서 숫자 1이 몇 개 있는지 개수를 출력해야 하는데요.
# length(which(mydata[1]=="1")) 로 일일이 출력하면 숫자가 잘 나오는데
# apply(mydata, 2, function(x) length(which(mydata[2]=="1")))로 하면 아예 다른 엄청 큰 수가 나옵니다.
# 왜 이런 건가요? 그리고 어떻게 고쳐야 하나요?
data = data.frame(
key = c(1, 2, 3, 4, 1, 2, 3)
)
data
apply(data, 2, function(x) { sum(ifelse(x == 1, 1, 0)) })
# 데이터 내에서 일차함수의 기울기 값 만을 추출하고 싶은데
# R코드 관련해서 어떻게 작성하는지 아시는 분 있으신가요??
lmFit = lm(hp ~ mpg, data = mtcars)
lmFit
# 기울기
coef(lmFit)[2]
# 절편
coef(lmFit)[1]
#
# p(Z<z1) = 0.9474
# 에서 z1을 R에서 어떻게 구하죠... ?̊̈
rnormData = rnorm(n = 1000, mean = 0, sd = 1)
hist(rnormData)
conf = quantile(rnormData, p = 0.9474)
conf
text(conf, 0, "|", col = "red", cex = 2.0)
# hist()함수 쓸때 옵션중에 breaks=옵션이 계급간격을 조정해준다고 하는데 어떤구간을 얘기하는 건가요 ? breaks 옵션을간격을 조정해봐도 계급구간이 옵션을 준 숫자만큼 변형이 잘안되서요 어떤기준인지 알려주세요
# 그리고 probability , prob 옵션도 설명 부탁드려요 ~
data = c(71, 84, 68, 75, 91, 87, 63, 77, 81, 98, 57, 73, 74, 85, 50, 62, 66, 78, 65, 59, 75, 89, 94, 93, 86, 61, 87, 74, 70, 67)
# 빈도 분포
hist(data, breaks = seq(50, 98, 8), probability = FALSE)
# 밀도함수
hist(data, breaks = seq(50, 98, 8), probability = TRUE)
# 제가 R Studio 쌩 초보인데 csv 파일을 어떻게 불러오나요?
# 그리고 데이터객체 이름 정하고 정한 이름을 작업폴더에 csv 파일로 저장하는 법 알려주실 수 있을까요.
data = read.csv("INPUT/출산율.csv", encoding = "utf-8")
data = read.csv("INPUT/출산율.csv", encoding = "cp949")
data = read.csv("INPUT/출산율.csv", encoding = "euc-kr")
data
#
# 코드는 이렇게 작성하고
# 엑셀은 단순히 판매량(아이스크림이라 그런지 기본이 억대입니다.)만 작성하고 R로 불러왔습니다.
# 안보이는 부분은
# hist(icsale, main="icecream sales volume", xlab="sales volume, ylab="frequency"로 작성했습니다.
# 근데 실행하니깐 x는 반드시 숫자이어야 한다고 하네요ㅜㅜ
# 어디가 잘못 된건지 모르겠습니다
hist(as.numeric(icsale$판매량), main="icecream sales volume", xlab="sales volume", ylab="frequency")
# 안녕하세요, 고수님들!!
# R Studio 왕초보자입니다.
# 다름이 아니라 학교과제중에
# 저기 제가 불러온 표에서 placebo에 관한 평균과 wirkstoff에 관한 평균을 구하라는 문제가 있는데요,
# 도대체 변수를 어떻게 지정하고 어떻게 평균을 구해야하는지 막막해서 질문을 올립니다.
# 제발 답변 꼭 부탁드립니다.!!!
data = data.frame(
num = c(10010, 10012, 10015, 10017, 10021, 10023, 10044, 10055, 10059, 10060, 10065, 10070, 10072, 10074, 10079, 10080, 10090, 10093, 10096, 10101, 10103, 10118, 10123, 10125, 10126)
, gender = c(1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 1, 2, 1, 2, 2, 2, 1, 2, 2, 1, 1, 1, 2, 1, 1)
, kidney = c(184.0, 160.3, 179.3, 176.2, 166.4, 168.0, 177.0, 162.4, 170.9, 188.3, 174.3, 171.7, 185.3, 165.5, 172.2, 168.6, 176.0, 168.1, 165.9, 183.0, 163.2, 176.5, 165.3, 180.9, 176.5)
, weight = c(76.4, 57.2, 74.2, 68.2, 56.6, 64.8, 67.5, 51.2, 65.8, 77.5, 64.2, 62.6, 80.8, 64.5, 81.6, 68.0, 81.3, 72.3, 54.1, 84.0, 63.0, 68.3, 54.7, 96.0, 74.4)
, legLength = c(101.6, 90.2, 99.4, 97.1, 91.0, 92.9, 103.6, 95.0, 79.5, 103.1, 102.7, 99.6, 101.2, 93.5, 97.5, 94.0, 95.6, 95.4, 92.6, 98.4, 86.7, 102.6, 96.5, 103.5, 95.1)
, running = c(6.17, 6.87, 6.39, 6.77, 6.93, 7.15, 7.68, 7.50, 6.70, 6.58, 6.39, 6.92, 6.38, 6.91, 7.35, 7.12, 6.55, 7.26, 6.96, 6.48, 6.84, 6.00, 7.48, 6.71, 6.73)
)
# kidney 평균
mean(data$kidney, na.rm = TRUE)
# weight 평균
mean(data$weight, na.rm = TRUE)
# [,1] [,2]
# [1,] "1서소문동" "6개포동"
# [2,] "2태평로" "7개포동"
# [3,] "3서초동" "8관훈동"
# [4,] "4관훈동" "9남대문"
# [5,] "5분당삼평" "10남대문"
# 안녕하세요
# R에서 위 행렬을 한줄의 벡터로 만들려고 합니다
# as.vector 쓰면 1열 전체 뒤에 2열이 붙어서 고민인데요
# 1 6 2 7 3 8 ... 순으로 벡터를 만드는 방법이 없을까요?
# 예시)
# "1서소문동","6개포동","2태평로","7개포동","3","8"...
data = data.frame(
col1 = c("1서소문동", "2태평로", "3서초동")
, col2 = c("6개포동", "7개포동", "8관훈동")
)
dataL1 = c()
for (i in 1:nrow(data)) {
for (j in 1:ncol(data)) {
val = data[i, j]
dataL1 = append(dataL1, val)
}
}
dataL1
# R에서 제공하는 trees 데이터셋에 대해 다음 문제를 해결하기 위한 R 코드를 작성하시오.
# (1) 나무의 지름(Girth)과 높이(Height)에 대해 산점도와 상관계수를 보이시오.
library(ggpubr)
library(GGally)
library(ggplot2)
ggscatter(trees, x = "Girth", y = "Height", add = "reg.line") +
stat_cor(label.x = 7, label.y = 90) +
stat_regline_equation(label.x = 7, label.y = 85) +
theme_bw()
# (2) trees데이터셋에 존재하는 3개 변수 간의 산점도와 상관계수를 보이시오.
ggpairs(trees)
# trees데이터셋에 존재하는 3개 변수 간의 산점도와 상관계수를 보이시오
# 인데 이게
# cor(iris[ , 1:3])이 맞는지 아닌지 모르겠네요
cor(trees)
# 데이터를 가공하는데 궁금증이 생겨 질문남깁니다.
# 예를들어
# 1 1 1 1
# 2 2 2 2
# 3 3 3 3
# 과 같은 데이터가 존재할때 이를
# 1
# 1
# 1
# 1
# 2
# 2
# 2
# 2
# 3
# 3
# 3
# 3
# 과 같은 모양으로 바꾸는 함수는 어떤걸 써야할까요?
# for문과 cbind를 함께 사용하고 t를 써서 방향을 돌려서 데이터를 뽑아내는걸 생각했는데 뜻대로 되지를 않네요. 데이터의 갯수가 3만개가 넘어 for문 사용이 필수적인 상황입니다.
# 도움을 받을 수 있을까요?
data = data.frame(
col1 = c(1, 2, 3)
, col2 = c(1, 2, 3)
)
dataL1 = data.frame()
for (i in 1:nrow(data)) {
for (j in 1:ncol(data)) {
val = data.frame(data[i, j])
dataL1 = dplyr::bind_rows(dataL1, val)
}
}
colnames(dataL1) = c("val")
dataL1
# R프로그래밍 5x5의 data.frame 이나 matrix를 만들려고 하는데 초기화된 값을
# function함수로 만들어 놓고 싶은데 코드를 어떻게 구성해야 하나요 ??
initData = function(initVal, ncol, nrow) {
maData = matrix(initVal, ncol=ncol, nrow=nrow)
return(maData)
}
maData = initData(2, 5, 5)
maData
# R에서 급여는 급여끼리 묶어서 합계를 구하고 평균을 구하는 방법을 알고 싶어요
# aggregate 함수 써서 사용하는거 맞나요?
# 급여입원료, 급여 진찰료 등등 급여 들어 있는 글자(노란색으로 밑줄친 부분)끼리 모여서 합계 , 평균 구하는 방법 알려주세요
library(dplyr)
data = data.frame(
급여진찰료 = c(1, 2, 3)
, 진찰료 = c(1, 2, 3)
, 급여입원료 = c(4, 5, 6)
)
data %>%
dplyr::select(starts_with("급여")) %>%
dplyr::summarise_all(funs(
sum(., na.rm = TRUE) # 합계
, mean(., na.rm = TRUE) # 평균값
)) %>%
dplyr::glimpse()
# R에서 set.seed(1)
# x <-c("T","R","I","A","N","G","L","E","S")
# sample(x,n,replace=T,prob=NULL)
# n=10
# 을 이용해서 T,R,I,A,N,G,L,E,S 을 복원 추출로 10번 뽑는 함수를 만들었는데요
# 혹시 9개단어 각각의 대해서 10번 복원 추출했을시 2번 이상 뽑힌 적이 있는 지 여부를 TRUE,FLASE로
# 출력하는 방법을 알려주실수 있나요ㅠㅠ
set.seed(1)
x <-c("T","R","I","A","N","G","L","E","S")
n=10
data = data.frame(
key = sample(x,n,replace=T,prob=NULL)
)
dataL1 = data %>%
dplyr::group_by(key) %>%
dplyr::summarise(n = n()) %>%
dplyr::mutate(
isFlag = dplyr::if_else(n > 1, TRUE, FALSE)
)
dplyr::tbl_df(dataL1)
#
# 풀다가 전혀 감이 안와서 물어보는데
# mlbench 패키지에서 제공하는 Ionosphere 데이터셋에 대해 문제를 해결하기 위한 R 코드를 작성하라는 문제에요!
# (1) 다음과 같이 Ionospere 데이터셋을 myds에 저장하시오.
library(mlbench)
library(dplyr)
data("Ionosphere")
myds <- Ionosphere
# (2) myds에서 class와 V1열의 값을 그룹으로 하여 V3~V10 열의 값들의 표준편차를 출력하시오. (주의 : 집계 작업시 팩터 타입의 열은 제외해야 한다.)
# 이 문제를 어떻게 풀어야 할지 감이 안와서 도와주세요...
dataL1 = myds %>%
dplyr::select(V1, V3:V10) %>%
dplyr::group_by(V1) %>%
dplyr::summarise_all(funs(
sd(., na.rm = TRUE) # 표준편차
))
dplyr::tbl_df(dataL1)
참고 문헌
[논문]
- 없음
[보고서]
- 없음
[URL]
- 없음
문의사항
[기상학/프로그래밍 언어]
- sangho.lee.1990@gmail.com
[해양학/천문학/빅데이터]
- saimang0804@gmail.com
본 블로그는 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'자기계발 > 지식iN·문의사항' 카테고리의 다른 글
[문의사항] 항공관측자료 관련 문의 (0) | 2021.01.27 |
---|---|
[문의사항] ERA-Interim 문의 (0) | 2021.01.27 |
[지식iN] R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 (2) : 2020년 03월 30일 (0) | 2020.04.30 |
[지식iN] R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 (3) : 2020년 04월 30일 (0) | 2020.04.30 |
[지식iN] R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 : 2020년 02월 21일 (0) | 2020.02.21 |
최근댓글