Associate Professor, College of Economics, Aoyama Gakuin University, Tokyo, Japan.
$
と[[]]
の使い方assign
forvalues
と同じようにループで連番データを読み込むtapply
の使い方mutate
の使い方$
と[[]]
の使い方$
と[[]]
のいずれを使っても、データの中の特定の変数を指定できる。[[]]
を使う場合、変数名を引用符で囲む必要があることに注意。例)“wage”# AERパッケージのデータを使う
library(AER)
#> Loading required package: car
#> Loading required package: carData
#> Loading required package: lmtest
#> Loading required package: zoo
#>
#> Attaching package: 'zoo'
#> The following objects are masked from 'package:base':
#>
#> as.Date, as.Date.numeric
#> Loading required package: sandwich
#> Loading required package: survival
data("CPS1985")
# `$`を用いた変数の指定
CPS1985$lnwage1 = log(CPS1985$wage)
head(CPS1985$lnwage1)
#> [1] 1.629241 1.599388 1.897620 1.386294 2.014903 2.570320
# [[]]を用いた変数の指定
CPS1985[["lnwage2"]] = log(CPS1985[["wage"]])
head(CPS1985$lnwage2)
#> [1] 1.629241 1.599388 1.897620 1.386294 2.014903 2.570320
# 既存データを一旦削除
rm(list =ls())
# AERパッケージのデータを使う
library(AER)
data("CPS1985")
# 対数変換したい変数のリスト
variables <- c("age", "wage")
for (var in variables) {
# 新しい変数名
new_var_name <- paste0("ln", var)
# 対数変換
CPS1985[[new_var_name]] <- log(CPS1985[[var]])
}
head(CPS1985$lnwage)
#> [1] 1.629241 1.599388 1.897620 1.386294 2.014903 2.570320
head(CPS1985$lnage)
#> [1] 3.555348 4.043051 2.944439 3.091042 3.555348 3.332205
#CPS1985 <- data.frame(CPS1985)
YAMLの例
---
title: Rメモ
output: github_document
---
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "figures/fig-",
out.width = "100%",
dpi = 300
)
knitr::opts_chunk$set(echo = TRUE, #コードを表示
cache = FALSE, #キャッシュを残さない
fig.path = "figures/fig-",
out.width = "100%",
dpi = 300,
message=FALSE, warning=FALSE)
1+1
#> [1] 2
a <- 1:3 |> sum()
a
#> [1] 6
plot(1:5, 6:10)
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following object is masked from 'package:car':
#>
#> recode
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
state <- state.x77
library(ggplot2)
ggplot(data = state) +
geom_point(mapping = aes(x = Income, y = Population) )
install.packages("wooldridge")
install.packages("AER")
library(wooldridge)
data("wage1")
wageModel <- lm(lwage ~ educ + exper + tenure, data = wage1)
summary(wageModel)
#>
#> Call:
#> lm(formula = lwage ~ educ + exper + tenure, data = wage1)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -2.05802 -0.29645 -0.03265 0.28788 1.42809
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 0.284360 0.104190 2.729 0.00656 **
#> educ 0.092029 0.007330 12.555 < 2e-16 ***
#> exper 0.004121 0.001723 2.391 0.01714 *
#> tenure 0.022067 0.003094 7.133 3.29e-12 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 0.4409 on 522 degrees of freedom
#> Multiple R-squared: 0.316, Adjusted R-squared: 0.3121
#> F-statistic: 80.39 on 3 and 522 DF, p-value: < 2.2e-16
Rのplot関数でグラフ作成すると、x軸のラベルに不要な小数点がついてしまうことがある。例)2005.0, 2005.5, 2006.0
year <- c(2005,2006,2007)
y <- c(1,2,3)
plot(year,y)
x軸の変数の値を増やすことで、小数点を避けられる場合もあるようだが、以下のようにうまくいかない場合もある。
year2 <- c(2005,2006,2007,2008)
y2 <- c(1,2,3,4)
plot(year2,y2)
その他の方法として、x軸のラベルをplot関数では指定せずに、後から、axis関数で追加する方法がある。
year <- c(2005,2006,2007)
y <- c(1,2,3)
plot(year,y, xaxt = "n")
# axisの最初の引数1は、x軸を意味する。
axis(1, 2005:2007)
yearを時間変数とする方法もある。
x <- 2010:2020
y <- 1:11
data1 <- data.frame(x, y)
library(ggplot2)
g1 <- ggplot(data = data1) +
geom_point(mapping = aes(x = x, y = y))
g1
g2 <- g1 + scale_x_continuous(breaks = ~ axisTicks(., log = FALSE))
g2
assign
assign("data_new", data)
rm(data)
forvalues
と同じようにループで連番データを読み込む# 2019年から2023年の役員データを読み込む
for (i in 2019:2023) {
# Construct file names
file_name <- paste0("yakuin_data_", i, ".csv")
file_name_new <- paste0("yakuin_data_", i, ".RData")
# Read the data
data <- read.csv(file_name, header = T, fileEncoding = "Shift-JIS")
# Assign data to a variable with its original name
assign(paste0("data", i), data)
}
tapply
の使い方tapply
を使うと、属性ごとの平均値を計算できる。
library(dplyr)
starwars <- starwars
height_mean <- tapply(starwars$height, starwars$sex, mean, na.rm=TRUE)
head(height_mean)
female hermaphroditic male none
171.5714 175.0000 179.1228 131.2000
Base R では |>
がパイプ演算子。
1:2 |> mean()
モダンなR(tidyverse)では %>%
がパイプ演算子。Control + Shift +
m がショートカット。
1:2 %>% mean()
ともに左辺が右辺の第一引数となる。
?formula
で説明がある。
mutate
の使い方mutate
は既存の変数に操作を加えて、新しい変数を作成する関数。
library(dplyr)
starwars %>%
select(name, mass) %>%
mutate(
mass2 = mass * 2,
mass2_squared = mass2 * mass2
)
library(dplyr)
starwars <- starwars
head(starwars)
starwars2 <- starwars %>%
select(name, mass, species) %>%
group_by(species) %>%
mutate(mass_norm = mass / mean(mass, na.rm = TRUE))
head(starwars2)
ここで、group_by
は、指定した変数ごとに後のmutate
で平均を計算することを指示するもので、それ自体ではデータに変化を及ぼさない。
方法1
aggregate
関数を使えば、集計量を計算できる。A <- state.x77
a <- aggregate(state.x77, list(Region = state.region), mean)
C <- warpbreaks
c <- aggregate(breaks ~ wool + tension, data = warpbreaks, mean)
方法2
library(doBy)
hsb2 <- read.table("https://stats.idre.ucla.edu/wp-content/uploads/2016/02/hsb2-1.csv", header=T, sep=",")
collapse1 <- summaryBy(socst + math ~ prog + ses + female, FUN=c(mean,sd), data=hsb2)
collapse1
-HOW CAN I “COLLAPSE” MY DATA IN R? | R FAQ
変数のない行を削除 dat2 <- subset(dat, !(is.na(dat$変数)))
NAがある行はすべて削除 dat2 <- na.omit(dat)
例) RMarkdownの場合
---
title: "伝統的な重力方程式の推定"
author: "田中 鮎夢"
date: "2024-04-25"
output:
html_document:
toc: yes
toc_float: yes
number_sections: yes
bibliography: ref.bib
link-citations: yes
---
例) Quatroの場合
---
title: "ユニクロの縫製工場の地図 (ggplot2)"
author: "Ayumu Tanaka"
format: html
toc: true
toc_float: true
number-sections: true
editor: visual
---
Laurent Berge and Grant McDermott. fixest – Fast Fixed-Effects Estimation: Short Introduction
library(readxl)
ABCD <- read_excel("ABCD.xlsx")
library("openxlsx")
write.xlsx(ABCD, "ABCD.xlsx")
library(cld3)
detect_language("日本語")
例) 「stringr」パッケージを用いて、「//」の後の文字列を切り出す。
library(stringr)
JPN <- str_split_i("The Antique: Secret of the Old Books // ビブリア古書堂の事件手帖", "//", i = -1)
例)
---
title: "Bibtexの練習"
author: "田中鮎夢"
date: "2023-12-12"
output:
html_document: default
bibliography: ref.bib
---
@joseph2022effect はハイチの研究
# 参考文献
#データの読み込み例
library(here)
a <- read.csv(here("qss", "INTRO", "UNpop.csv"))
#作業ディレクトリの変更(1)
library(here)
setwd(here("qss", "INTRO"))
getwd()
#作業ディレクトリの変更(2)
library(here)
i_am("qss/INTRO/chap01.Rmd") #Rマークダウンがある場所をルートディレクトリからの相対パスとして表現
setwd(here("qss", "INTRO"))
getwd()