빅데이터 시각화 중간고사 대비 정리

빅데이터 시각화 전체적으로 공부 정리

#사용자정의 함수

myfunc <- function(){
  print('hello.world!')
}

myfunc()
[1] "hello.world!"
#2
sum<- function(x,y){
  x+y
}
sum(2,3)

5

#2-1
sum <- function(x,y){
  return(x+y)
}
sum(2,3)

5

#3
pow <-function(x,y=3) {
  x^y
}
pow(2)

8


#4
math <- function(x,y){
  add <- x+y
  sub <-x-y
  mul <- x*y
  div <- x/y
  c(addition=add,subtraction=sub,multiplication=mul,division=div)
}
math(6,3)

<dl class=dl-horizontal> <dt>addition</dt> <dd>9</dd> <dt>subtraction</dt> <dd>3</dd> <dt>multiplication</dt> <dd>18</dd> <dt>division</dt> <dd>2</dd> </dl>

#5 변수 pi에 3.14를 저장한 후, pi를 이용하여 반지름이 10, 12, 15인 원의 면적을 각각 구한다.

pi<-3.14
x<-c(10,12,15)
pi*x^2

<ol class=list-inline> <li>314</li> <li>452.16</li> <li>706.5</li> </ol>

#6 y=2x2+5x+10에 대해 x가 각각 6, 8, 10일 때 y의 값을 각각 구한다.

x<-c(6,8,10)
y<-2*x^2+5*x+10
y

<ol class=list-inline> <li>112</li> <li>178</li> <li>260</li> </ol>

#7 100~200 사이의 짝수로 구성된 벡터 vc.2를 생성하고 vc.2의 내용을 출력하는 코드를 작성하시오.
x<-100:200
vc.2<-x[x%%2==0]
vc.2

<ol class=list-inline> <li>100</li> <li>102</li> <li>104</li> <li>106</li> <li>108</li> <li>110</li> <li>112</li> <li>114</li> <li>116</li> <li>118</li> <li>120</li> <li>122</li> <li>124</li> <li>126</li> <li>128</li> <li>130</li> <li>132</li> <li>134</li> <li>136</li> <li>138</li> <li>140</li> <li>142</li> <li>144</li> <li>146</li> <li>148</li> <li>150</li> <li>152</li> <li>154</li> <li>156</li> <li>158</li> <li>160</li> <li>162</li> <li>164</li> <li>166</li> <li>168</li> <li>170</li> <li>172</li> <li>174</li> <li>176</li> <li>178</li> <li>180</li> <li>182</li> <li>184</li> <li>186</li> <li>188</li> <li>190</li> <li>192</li> <li>194</li> <li>196</li> <li>198</li> <li>200</li> </ol>

#8 홀수
x<-100:200
vc.2<-x[x%%2!=0]
vc.2

<ol class=list-inline> <li>101</li> <li>103</li> <li>105</li> <li>107</li> <li>109</li> <li>111</li> <li>113</li> <li>115</li> <li>117</li> <li>119</li> <li>121</li> <li>123</li> <li>125</li> <li>127</li> <li>129</li> <li>131</li> <li>133</li> <li>135</li> <li>137</li> <li>139</li> <li>141</li> <li>143</li> <li>145</li> <li>147</li> <li>149</li> <li>151</li> <li>153</li> <li>155</li> <li>157</li> <li>159</li> <li>161</li> <li>163</li> <li>165</li> <li>167</li> <li>169</li> <li>171</li> <li>173</li> <li>175</li> <li>177</li> <li>179</li> <li>181</li> <li>183</li> <li>185</li> <li>187</li> <li>189</li> <li>191</li> <li>193</li> <li>195</li> <li>197</li> <li>199</li> </ol>

#9 100에서 200으로 구성된 벡터 d를 생성한 다음 각 문제를 수행하는 코드를 작성하고 답을 구하시오.

d<-c(100:200)
d
d[10]

<ol class=list-inline> <li>100</li> <li>101</li> <li>102</li> <li>103</li> <li>104</li> <li>105</li> <li>106</li> <li>107</li> <li>108</li> <li>109</li> <li>110</li> <li>111</li> <li>112</li> <li>113</li> <li>114</li> <li>115</li> <li>116</li> <li>117</li> <li>118</li> <li>119</li> <li>120</li> <li>121</li> <li>122</li> <li>123</li> <li>124</li> <li>125</li> <li>126</li> <li>127</li> <li>128</li> <li>129</li> <li>130</li> <li>131</li> <li>132</li> <li>133</li> <li>134</li> <li>135</li> <li>136</li> <li>137</li> <li>138</li> <li>139</li> <li>140</li> <li>141</li> <li>142</li> <li>143</li> <li>144</li> <li>145</li> <li>146</li> <li>147</li> <li>148</li> <li>149</li> <li>150</li> <li>151</li> <li>152</li> <li>153</li> <li>154</li> <li>155</li> <li>156</li> <li>157</li> <li>158</li> <li>159</li> <li>160</li> <li>161</li> <li>162</li> <li>163</li> <li>164</li> <li>165</li> <li>166</li> <li>167</li> <li>168</li> <li>169</li> <li>170</li> <li>171</li> <li>172</li> <li>173</li> <li>174</li> <li>175</li> <li>176</li> <li>177</li> <li>178</li> <li>179</li> <li>180</li> <li>181</li> <li>182</li> <li>183</li> <li>184</li> <li>185</li> <li>186</li> <li>187</li> <li>188</li> <li>189</li> <li>190</li> <li>191</li> <li>192</li> <li>193</li> <li>194</li> <li>195</li> <li>196</li> <li>197</li> <li>198</li> <li>199</li> <li>200</li> </ol>

109


#d에서 홀수만 출력하시오
d[d%%2==1]

#d에서 3의배수만 출력하시오
d[d%%3==0]

<ol class=list-inline> <li>101</li> <li>103</li> <li>105</li> <li>107</li> <li>109</li> <li>111</li> <li>113</li> <li>115</li> <li>117</li> <li>119</li> <li>121</li> <li>123</li> <li>125</li> <li>127</li> <li>129</li> <li>131</li> <li>133</li> <li>135</li> <li>137</li> <li>139</li> <li>141</li> <li>143</li> <li>145</li> <li>147</li> <li>149</li> <li>151</li> <li>153</li> <li>155</li> <li>157</li> <li>159</li> <li>161</li> <li>163</li> <li>165</li> <li>167</li> <li>169</li> <li>171</li> <li>173</li> <li>175</li> <li>177</li> <li>179</li> <li>181</li> <li>183</li> <li>185</li> <li>187</li> <li>189</li> <li>191</li> <li>193</li> <li>195</li> <li>197</li> <li>199</li> </ol>

<ol class=list-inline> <li>102</li> <li>105</li> <li>108</li> <li>111</li> <li>114</li> <li>117</li> <li>120</li> <li>123</li> <li>126</li> <li>129</li> <li>132</li> <li>135</li> <li>138</li> <li>141</li> <li>144</li> <li>147</li> <li>150</li> <li>153</li> <li>156</li> <li>159</li> <li>162</li> <li>165</li> <li>168</li> <li>171</li> <li>174</li> <li>177</li> <li>180</li> <li>183</li> <li>186</li> <li>189</li> <li>192</li> <li>195</li> <li>198</li> </ol>

#1부터 50까지의 수 중에서 5의 배수이면서 6의 배수는 아닌 수를 구하라 
d<-c(1:50)
d
d[d%%5==0&!d%%6==0]

<ol class=list-inline> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> <li>9</li> <li>10</li> <li>11</li> <li>12</li> <li>13</li> <li>14</li> <li>15</li> <li>16</li> <li>17</li> <li>18</li> <li>19</li> <li>20</li> <li>21</li> <li>22</li> <li>23</li> <li>24</li> <li>25</li> <li>26</li> <li>27</li> <li>28</li> <li>29</li> <li>30</li> <li>31</li> <li>32</li> <li>33</li> <li>34</li> <li>35</li> <li>36</li> <li>37</li> <li>38</li> <li>39</li> <li>40</li> <li>41</li> <li>42</li> <li>43</li> <li>44</li> <li>45</li> <li>46</li> <li>47</li> <li>48</li> <li>49</li> <li>50</li> </ol>

<ol class=list-inline> <li>5</li> <li>10</li> <li>15</li> <li>20</li> <li>25</li> <li>35</li> <li>40</li> <li>45</li> <li>50</li> </ol>

#1부터 50까지의 수 중에서 5의 배수이면서 6의 배수는 아닌 수의 합을 구하라 

temp =0 
for (i in 1:50) {
  if(i%%5 ==0){
    if(i%%6!=0){
      temp =temp+i
      print(i)
    }
  }
}
print('___________________________')
print(temp)
[1] 5
[1] 10
[1] 15
[1] 20
[1] 25
[1] 35
[1] 40
[1] 45
[1] 50
[1] "___________________________"
[1] 245
# 1부터 x까지 5의 배수이면서 6의 배수가 아닌 것들의 합 구하기

a <- function(x){
  sum<-0
  for(i in (1:x))
  {
    if(i %%5 ==0 & i %%6 !=0){
      sum =sum+i
    }
  }
  print(sum)
}

a(50)
[1] 245
getwd()

‘C:/Users/MyCom/R’

#1부터 y까지 x의 배수인 것들의 합
m<- function(x,y){
  sum<-0
  for(i in (1:y)){
    if(i%%x==0)
      sum = sum +i
    
  }
  print(sum)
}
m(3,20)

[1] 63

#구구단 코딩
for (i in (1:9)) {
  for (j in (1:9)) {
    print(paste(i,"X",j,"=",i*j))    
  }
  
}
[1] "1 X 1 = 1"
[1] "1 X 2 = 2"
[1] "1 X 3 = 3"
[1] "1 X 4 = 4"
[1] "1 X 5 = 5"
[1] "1 X 6 = 6"
[1] "1 X 7 = 7"
[1] "1 X 8 = 8"
[1] "1 X 9 = 9"
[1] "2 X 1 = 2"
[1] "2 X 2 = 4"
[1] "2 X 3 = 6"
[1] "2 X 4 = 8"
[1] "2 X 5 = 10"
[1] "2 X 6 = 12"
[1] "2 X 7 = 14"
[1] "2 X 8 = 16"
[1] "2 X 9 = 18"
[1] "3 X 1 = 3"
[1] "3 X 2 = 6"
[1] "3 X 3 = 9"
[1] "3 X 4 = 12"
[1] "3 X 5 = 15"
[1] "3 X 6 = 18"
[1] "3 X 7 = 21"
[1] "3 X 8 = 24"
[1] "3 X 9 = 27"
[1] "4 X 1 = 4"
[1] "4 X 2 = 8"
[1] "4 X 3 = 12"
[1] "4 X 4 = 16"
[1] "4 X 5 = 20"
[1] "4 X 6 = 24"
[1] "4 X 7 = 28"
[1] "4 X 8 = 32"
[1] "4 X 9 = 36"
[1] "5 X 1 = 5"
[1] "5 X 2 = 10"
[1] "5 X 3 = 15"
[1] "5 X 4 = 20"
[1] "5 X 5 = 25"
[1] "5 X 6 = 30"
[1] "5 X 7 = 35"
[1] "5 X 8 = 40"
[1] "5 X 9 = 45"
[1] "6 X 1 = 6"
[1] "6 X 2 = 12"
[1] "6 X 3 = 18"
[1] "6 X 4 = 24"
[1] "6 X 5 = 30"
[1] "6 X 6 = 36"
[1] "6 X 7 = 42"
[1] "6 X 8 = 48"
[1] "6 X 9 = 54"
[1] "7 X 1 = 7"
[1] "7 X 2 = 14"
[1] "7 X 3 = 21"
[1] "7 X 4 = 28"
[1] "7 X 5 = 35"
[1] "7 X 6 = 42"
[1] "7 X 7 = 49"
[1] "7 X 8 = 56"
[1] "7 X 9 = 63"
[1] "8 X 1 = 8"
[1] "8 X 2 = 16"
[1] "8 X 3 = 24"
[1] "8 X 4 = 32"
[1] "8 X 5 = 40"
[1] "8 X 6 = 48"
[1] "8 X 7 = 56"
[1] "8 X 8 = 64"
[1] "8 X 9 = 72"
[1] "9 X 1 = 9"
[1] "9 X 2 = 18"
[1] "9 X 3 = 27"
[1] "9 X 4 = 36"
[1] "9 X 5 = 45"
[1] "9 X 6 = 54"
[1] "9 X 7 = 63"
[1] "9 X 8 = 72"
[1] "9 X 9 = 81"

#paste 함수 : 문자열 합치기
paste(c("Statistics"), "R")
paste(c("a", "b", "c"), c("x", "y", "z")) # element-wise 

a <- c("Hello", "World") 
b <- c(",", "!") 
paste0(a, b)


paste(c("a", "b"), c("x", "y"), sep = " and ")

‘Statistics R’

<ol class=list-inline> <li>‘a x’</li> <li>‘b y’</li> <li>‘c z’</li> </ol>

<ol class=list-inline> <li>‘Hello,’</li> <li>‘World!’</li> </ol>

<ol class=list-inline> <li>‘a and x’</li> <li>‘b and y’</li> </ol>


#for문 반복처리
#for문 1~100 합
s =0 
for(i in 1:100){
  s <-s+i
}
s

5050

#1에서 100까지의 정수 중 2의 배수이면서 3의 배수가 아닌 정수 벡터로 계산
x <-1:100
x[(x%%2==0)&(x%%3!=0)]

<ol class=list-inline> <li>2</li> <li>4</li> <li>8</li> <li>10</li> <li>14</li> <li>16</li> <li>20</li> <li>22</li> <li>26</li> <li>28</li> <li>32</li> <li>34</li> <li>38</li> <li>40</li> <li>44</li> <li>46</li> <li>50</li> <li>52</li> <li>56</li> <li>58</li> <li>62</li> <li>64</li> <li>68</li> <li>70</li> <li>74</li> <li>76</li> <li>80</li> <li>82</li> <li>86</li> <li>88</li> <li>92</li> <li>94</li> <li>98</li> <li>100</li> </ol>

#행렬 행,열 이름 넣어주기
matrix(1:9,nrow=3,byrow=TRUE,dimnames=list(c("행1","행2","행3"),c("열1","열2","열3")))

열1열2열3
행1123
행2456
행3789

#배열 생성 
x=array(1:27,dim = c(3,3,3))
x

<ol class=list-inline> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> <li>9</li> <li>10</li> <li>11</li> <li>12</li> <li>13</li> <li>14</li> <li>15</li> <li>16</li> <li>17</li> <li>18</li> <li>19</li> <li>20</li> <li>21</li> <li>22</li> <li>23</li> <li>24</li> <li>25</li> <li>26</li> <li>27</li> </ol>

#행렬의 인덱싱
a<-matrix(1:9,nrow = 3)
a
147
258
369
#2행~3행 출력
a[2:3,]
258
369
#
a[,2]

#2열~3열 출력
a[,2:3]

<ol class=list-inline> <li>4</li> <li>5</li> <li>6</li> </ol>

47
58
69
#역행렬
x = array(1:4, dim = c(2, 2))
y = array(5:8, dim = c(2, 2))
x
y
solve(x)
13
24
57
68
-2 1.5
1 -0.5
# data.frame 컬럼 추가

df <- data.frame(col1=c('a','b','c','d','e') , col2=c(2, 4, 6, 8, 10)) 
df$col3 <- c(1,2,3,4,5) 
df

col1col2col3
a 21
b 42
c 63
d 84
e 105
# 이름이 같은 열 변수가 없다면, merge 함수의 by.x와 by.y에 합칠 때
# 사용할 열의 속성명을 각각 기입해주어야 함
name1 = c("철수", "춘향", "길동")
name2 = c("민수", "춘향", "길동")
age = c(22, 20, 25)
gender = factor(c("M", "F", "M"))
blood.type = factor(c("A", "O", "B"))
patients1 = data.frame(name1, age, gender)
patients1

patients2 = data.frame(name2, blood.type)
patients2

patients = merge(patients1, patients2, by.x = "name1", by.y = "name2")
patients


patients = merge(patients1, patients2, by.x = "name1", by.y = "name2", all = TRUE)
patients
name1agegender
철수22 M
춘향20 F
길동25 M
name2blood.type
민수A
춘향O
길동B
name1agegenderblood.type
길동25 M B
춘향20 F O
name1agegenderblood.type
길동25 M B
철수22 M NA
춘향20 F O
민수NA NA A
patients = data.frame(name = c("철수", "춘향", "길동"), age = c(22, 20, 25), gender = factor(c("M", "F", "M")), blood.type = factor(c("A", "O", "B")))
no.patients = data.frame(day = c(1:6), no = c(50, 60, 55, 52, 65, 58))




# 리스트 
patients = data.frame(name = c("철수", "춘향", "길동"), age = c(22, 20, 25), gender = factor(c("M", "F", "M")), blood.type = factor(c("A", "O", "B")))
no.patients = data.frame(day = c(1:6), no = c(50, 60, 55, 52, 65, 58))


# 데이터를 단순 추가
listPatients = list(patients, no.patients) 
listPatients

  1. nameagegenderblood.type
    철수22 M A
    춘향20 F O
    길동25 M B
  2. dayno
    1 50
    2 60
    3 55
    4 52
    5 65
    6 58
# 각 데이터에 이름을 부여하면서 추가 
listPatients = list(patients=patients, no.patients = no.patients) 
listPatients
$patients
nameagegenderblood.type
철수22 M A
춘향20 F O
길동25 M B
$no.patients
dayno
1 50
2 60
3 55
4 52
5 65
6 58

listPatients$patients		# 요소명 입력

listPatients[[1]]				# 인덱스 입력

listPatients[["patients"]]			# 요소명을 ""에 입력

listPatients[["no.patients"]]		# 요소명을 ""에 입력

nameagegenderblood.type
철수22 M A
춘향20 F O
길동25 M B
nameagegenderblood.type
철수22 M A
춘향20 F O
길동25 M B
nameagegenderblood.type
철수22 M A
춘향20 F O
길동25 M B
dayno
1 50
2 60
3 55
4 52
5 65
6 58
# no.patients 요소의 평균을 구해줌
lapply(listPatients$no.patients, mean) 
$day
3.5
$no
56.6666666666667
# patients 요소의 평균을 구해줌. 숫자 형태가 아닌 것은 평균이 구해지지 않음
lapply(listPatients$patients, mean) 
Warning message in mean.default(X[[i]], ...):
"argument is not numeric or logical: returning NA"Warning message in mean.default(X[[i]], ...):
"argument is not numeric or logical: returning NA"Warning message in mean.default(X[[i]], ...):
"argument is not numeric or logical: returning NA"
$name
<NA>
$age
22.3333333333333
$gender
<NA>
$blood.type
<NA>
sapply(listPatients$no.patients, mean) 

<dl class=dl-horizontal> <dt>day</dt> <dd>3.5</dd> <dt>no</dt> <dd>56.6666666666667</dd> </dl>

sapply(listPatients$patients, mean) 

Warning message in mean.default(X[[i]], ...):
"argument is not numeric or logical: returning NA"Warning message in mean.default(X[[i]], ...):
"argument is not numeric or logical: returning NA"Warning message in mean.default(X[[i]], ...):
"argument is not numeric or logical: returning NA"

<dl class=dl-horizontal> <dt>name</dt> <dd><NA></dd> <dt>age</dt> <dd>22.3333333333333</dd> <dt>gender</dt> <dd><NA></dd> <dt>blood.type</dt> <dd><NA></dd> </dl>


# sapply()의 simplify 옵션을 F로 하면 lapply() 결과와 동일한 결과를 반환함
sapply(listPatients$no.patients, mean, simplify = F) 


$day
3.5
$no
56.6666666666667
#apply
x<-matrix(1:9,c(3:3))
x
147
258
369

#Apply 함수는 행렬의 행 또는 열 방향으로 특정 함수를 적용한다.
#apply(array, 방향, 함수)
#1: 행, 2: 열

apply(x, 2, function(x){2*x}) 

2 814
4 1016
6 1218

#if else문 
grade <- 'A'

if (grade == 'A') {       
  
  print('합격')
  
} else if (grade == 'B') { 
    
  print('보류')
    
} else {
      
  print('불합격')
      
}
[1] "합격"
#ifelse문
vec1 <- c(10,20,30)

ifelse (vec1 == 20, '인사부', '총무부')      # in oracle : decode(vec1,10, '인사부', '총무부')

<ol class=list-inline> <li>‘총무부’</li> <li>‘인사부’</li> <li>‘총무부’</li> </ol>



#1. x가 5 이하고 3이상인경우 "yes" 출력

#2. x가 1 이상이고 2이하면 "soso" 출력

#3. x가 위의 경우가 아닌경우 "no" 출력

x <- 5

if(x <= 5 && x >= 3) {
  print("yes")
} else if (x <= 1 && x >= 2){
  print("soso")
} else {
  print("no")
}

[1] "yes"

#1. 10,20,30,50,70,80,90,100으로 이루어진 시험점수 벡터가 있다고 가정

#2. 시험의 합격점수는 50점임

#3. 시험점수 벡터를 이용하여 "합격" 과 "불합격" 으로 벡터를 만들고 싶음



#이 경우에 if문을 활용한다면 리스트, 반복문, if문등 매우 귀찮은 작업들을 해줘야 합니다.

#이렇게 벡터단위로 조건 연산을 처리할때는 ifelse가 매우 유용합니다.



#ifelse로 위의 조건을 처리

#시험점수 벡터
grade <- c(10,20,30,50,70,80,90,100)

#ifelse를 활용한 합격여부벡터
is_pass <- ifelse (grade >= 50, '합격', '불합격')
print(is_pass)


[1] "불합격" "불합격" "불합격" "합격"   "합격"   "합격"   "합격"   "합격"  

#1. 10,20,30,50,70,80,90,100으로 이루어진 시험점수 벡터가 있다고 가정

#2. 시험의 합격점수는 50점임

#3. 90점 이상에게 장학금을 주고싶음

#3. 시험점수 벡터를 이용하여 "합격" 과 "불합격"과 "장학금" 을 벡터로 만들고 싶음



#이경우 아까보다 조건이 1개 더 많아졌죠?
  
#  이랬을 때 조건을 불만족 했을때 넣는 값 자리에 ifelse를 하나 더 넣어주면됩니다.



#시험점수 벡터
grade <- c(10,20,30,50,70,80,90,100)

#ifelse를 활용한 합격여부벡터
is_pass <- ifelse (grade >= 90, '장학금', 
                   ifelse(grade >= 50, '합격','불합격'))

print(is_pass)

[1] "불합격" "불합격" "불합격" "합격"   "합격"   "합격"   "장학금" "장학금"

#ifelse
a<-10
b<-20
ifelse(a>b,c<-a,c<-b)
c

20

20


#while 문 짝수 

i<-0
while (i<=9) {
  i<-i+1
  if(i%%2!=0){
    next #print()를 실행하지 않고 while문의 처음으로감
  }
  print(i)  
}
[1] 2
[1] 4
[1] 6
[1] 8
[1] 10

# repeat문 홀수 출력

i<-0
repeat{
  i<-i+1
  if(i %%2==0)next
  if(i>30) break
  print(i)
}
[1] 1
[1] 3
[1] 5
[1] 7
[1] 9
[1] 11
[1] 13
[1] 15
[1] 17
[1] 19
[1] 21
[1] 23
[1] 25
[1] 27
[1] 29

# 1부터 10까지의 수 중 소수 출력하기
for(i in 1:10) {
  check = 0
  for(j in 1:i) {
    if(i%%j ==0) {
      check = check+1
    }
  }
  if(check ==2) { 
    print(i)
  }
}
[1] 2
[1] 3
[1] 5
[1] 7
## 1~10까지 홀수의 합과 짝수의 합 구하기
# even : 짝수 합, odd : 홀수 합

num <- c(1:10)
odd <- 0
even <- 0
for(i in num){
  if(i %% 2 == 0){
    even <- even+i
    }else{
    odd <- odd+i
    }
}
odd
even
cat("홀수 합=",odd,", 짝수 합=",even)

25

30

홀수 합= 25 , 짝수 합= 30
### 1~10까지 짝수 

num <- c(1:10)
for(i in num){
  if(i %% 2 == 0){
    print(i)
  }
}
[1] 2
[1] 4
[1] 6
[1] 8
[1] 10

## 성적처리 
kor <- c(81, 95, 70)
eng <- c(75, 88, 78)
mat <- c(78, 99, 66)
name <- c("홍길동","이순신","유관순")

student <- data.frame(name, kor,eng, mat)
student
namekorengmat
홍길동81 75 78
이순신95 88 99
유관순70 78 66

# 총점, 평균 칼럼 추가 
tot <- student$kor + student$eng + student$mat
tot # 234 282 214
avg <- round(tot / 3, 2)
avg # 78.00 94.00 71.33

student$avg <- avg
student$tot <- tot
student

<ol class=list-inline> <li>234</li> <li>282</li> <li>214</li> </ol>

<ol class=list-inline> <li>78</li> <li>94</li> <li>71.33</li> </ol>

namekorengmatavgtot
홍길동81 75 78 78.00 234
이순신95 88 99 94.00 282
유관순70 78 66 71.33 214

#팩토리얼

fact = function(x) {   # 함수의 이름은 fact, 입력은 x
  fa = 1  # 계승값을 저장할 변수
  while(x>1) {  # x가 1보다 큰 동안 반복
    fa = fa*x   # x 값을 fa에 곱한 후 fa에 다시 저장
    x = x-1  # x 값을 1 감소
  }  
  return(fa)   # 최종 계산된 fa 반환
}
fact(5)	  # 5!을 계산한 결과 출력
fact(3)

120

6


# 04 데이터 정제 예제 1 : 결측값 처리 # 

# is.na 함수를 이용해 결측값 처리하기
str(airquality)	# airquality 데이터의 구조를 살펴봄.


'data.frame':	153 obs. of  6 variables:
 $ Ozone  : int  41 36 12 18 NA 28 23 19 8 NA ...
 $ Solar.R: int  190 118 149 313 NA NA 299 99 19 194 ...
 $ Wind   : num  7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
 $ Temp   : int  67 72 74 62 56 66 65 59 61 69 ...
 $ Month  : int  5 5 5 5 5 5 5 5 5 5 ...
 $ Day    : int  1 2 3 4 5 6 7 8 9 10 ...
# airquality 데이터에서 NA인 것은 TRUE, 아니면 FALSE로 나타냄. 데이터가 많아 head 함수로 추려냄.
head(is.na(airquality))	

OzoneSolar.RWindTempMonthDay
FALSEFALSEFALSEFALSEFALSEFALSE
FALSEFALSEFALSEFALSEFALSEFALSE
FALSEFALSEFALSEFALSEFALSEFALSE
FALSEFALSEFALSEFALSEFALSEFALSE
TRUE TRUEFALSEFALSEFALSEFALSE
FALSE TRUEFALSEFALSEFALSEFALSE
table(is.na(airquality))	# NA가 총 44개 있음.

FALSE  TRUE 
  874    44 
table(is.na(airquality$Temp))	# Temp에는 NA가 없음을 확인함.
FALSE 
  153 

table(is.na(airquality$Ozone))	# Ozone에는 NA가 37개 발견됨.

FALSE  TRUE 
  116    37 

mean(airquality$Temp)		# NA가 없는 Temp는 평균이 구해짐.

77.8823529411765


mean(airquality$Ozone)		# NA가 있는 Ozone은 평균이 NA로 나옴.

<NA>


air_narm = airquality[!is.na(airquality$Ozone), ] # Ozone 속성에서 NA가 없는 값만 추출함. 
air_narm

OzoneSolar.RWindTempMonthDay
1 41 190 7.467 5 1
2 36 118 8.072 5 2
3 12 149 12.674 5 3
4 18 313 11.562 5 4
6 28 NA 14.966 5 6
7 23 299 8.665 5 7
8 19 99 13.859 5 8
9 8 19 20.161 5 9
11 7 NA 6.974 5 11
12 16 256 9.769 5 12
13 11 290 9.266 5 13
14 14 274 10.968 5 14
15 18 65 13.258 5 15
16 14 334 11.564 5 16
17 34 307 12.066 5 17
18 6 78 18.457 5 18
19 30 322 11.568 5 19
20 11 44 9.762 5 20
21 1 8 9.759 5 21
22 11 320 16.673 5 22
23 4 25 9.761 5 23
24 32 92 12.061 5 24
28 23 13 12.067 5 28
29 45 252 14.981 5 29
30115 223 5.779 5 30
31 37 279 7.476 5 31
38 29 127 9.782 6 7
40 71 291 13.890 6 9
41 39 323 11.587 6 10
44 23 148 8.082 6 13
.....................
12385 188 6.394 8 31
12496 167 6.991 9 1
12578 197 5.192 9 2
12673 183 2.893 9 3
12791 189 4.693 9 4
12847 95 7.487 9 5
12932 92 15.584 9 6
13020 252 10.980 9 7
13123 220 10.378 9 8
13221 230 10.975 9 9
13324 259 9.773 9 10
13444 236 14.981 9 11
13521 259 15.576 9 12
13628 238 6.377 9 13
137 9 24 10.971 9 14
13813 112 11.571 9 15
13946 237 6.978 9 16
14018 224 13.867 9 17
14113 27 10.376 9 18
14224 238 10.368 9 19
14316 201 8.082 9 20
14413 238 12.664 9 21
14523 14 9.271 9 22
14636 139 10.381 9 23
147 7 49 10.369 9 24
14814 20 16.663 9 25
14930 193 6.970 9 26
15114 191 14.375 9 28
15218 131 8.076 9 29
15320 223 11.568 9 30
mean(air_narm$Ozone)	# 결측값이 제거된 데이터에서는 mean 함수가 정상적으로 동작함.

42.1293103448276

# na.omit 함수를 이용해 결측값 처리하기
air_narm1 = na.omit(airquality)
mean(air_narm1$Ozone)

42.0990990990991