Lecture5:関数mergeの補足

作業ディレクトリの確認

getwd()
## [1] "/cloud/project"

”sample_en.txt”の頻度テーブル

txt1<-readLines("sample_texts/sample_en.txt")
wordLst<-strsplit(txt1,"[[:space:]]|[[:punct:]]")
wordLst<-unlist(wordLst)
wordLst<-tolower(wordLst)
wordLst<- wordLst[wordLst != ""]
freq1 <- table(wordLst)
freq_data1<-sort(freq1, decreasing=TRUE)
(freqData1 <- data.frame(freq_data1))

”shiny.txt”の頻度テーブル

txt2<-readLines("shiny.txt")
wordLst<-strsplit(txt2,"[[:space:]]|[[:punct:]]")
wordLst<-unlist(wordLst)
wordLst<-tolower(wordLst)
wordLst<- wordLst[wordLst != ""]
freq2 <- table(wordLst)
freq_data2<-sort(freq2, decreasing=TRUE)
(freqData2 <- data.frame(freq_data2))

2つのデータ型変数を連結(merge)

全ての単語

freqData1_2 <-merge(freqData1, freqData2, all=T, by="wordLst")
head(freqData1_2)

共通単語のみ

merge(freqData1, freqData2, by="wordLst")

freqData1の単語

merge(freqData1, freqData2, all.x=TRUE, by="wordLst")

freqData2の単語

merge(freqData1, freqData2, all.y=TRUE, by="wordLst")

空セル(NA)に値を代入

freqData1_2[is.na(freqData1_2)] <- 0
head(freqData1_2)

dplyrパッケージ: full_join関数(merge関数の代用)

インストール

install.packages("dplyr", dependencies = TRUE)

dplyrパッケージの読み込み

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

全単語結合

full_join(freqData1, freqData2, all = T, by = "wordLst")

共通単語のみ結合

inner_join(freqData1, freqData2, all = T, by = "wordLst")

条件文if(Lec04のやり残し部分)

calcSQRT

calcSQRT<- function(value) {
    return(sqrt(value))
}

calc2ndPower

calc2ndPower<- function(value) {
  return (value^2)
}

実行

tmp <- 100
calcSQRT(tmp)
## [1] 10
calc2ndPower(tmp)
## [1] 10000

条件文1

分岐条件: 分類値

calcTest1 <- function(value, type=1){
  if(type==1){
      ans <- calcSQRT(value)
  }else if(type==2){
      ans <- calc2ndPower(value)
  }
  return(ans)
}

実行

calcTest1(100)
## [1] 10
calcTest1(100,2)
## [1] 10000

条件文2

分岐条件: 真偽値

calcTest2 <- function(value, sqrtFlag=FALSE){
  if(sqrtFlag==TRUE){
      ans <- calcSQRT(value)
  }else{
      ans <- calc2ndPower(value)
  }
  return(ans)
}

実行

calcTest2(100)
## [1] 10000
calcTest2(100, sqrtFlag=TRUE)
## [1] 10

条件文3 switch

分岐条件: 分類値(文字列)

calcTest3 <- function(value, type="p"){
  ans <- switch (type,
    "s" = calcSQRT(value),
    "p" = calc2ndPower(value)
  )
  return(ans)
}

実行

calcTest3(100)
## [1] 10000
calcTest3(100, type="s")
## [1] 10
calcTest3(100, type="p")
## [1] 10000

練習:引数に頻度タイプの選択を持ち、単語リスト情報から、粗頻度もしくは相対頻度のデータフレームが戻り値となる関数をファイル“utils.R”内に記述

第1引数: 単語リスト

第2引数: 頻度のタイプ(分類or真偽値)

utils.Rファイルの読み込み

source("utils.R")

getFreq関数の実行例1

getFreq(wordLst)

getFreq関数の実行例2

getFreq(wordLst, relative=TRUE)