빅데이터 시각화 중간고사 대비 정리
빅데이터 시각화 전체적으로 공부 정리
#사용자정의 함수
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 | |
---|---|---|---|
행1 | 1 | 2 | 3 |
행2 | 4 | 5 | 6 |
행3 | 7 | 8 | 9 |
#배열 생성
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
1 | 4 | 7 |
2 | 5 | 8 |
3 | 6 | 9 |
#2행~3행 출력
a[2:3,]
2 | 5 | 8 |
3 | 6 | 9 |
#
a[,2]
#2열~3열 출력
a[,2:3]
<ol class=list-inline> <li>4</li> <li>5</li> <li>6</li> </ol>
4 | 7 |
5 | 8 |
6 | 9 |
#역행렬
x = array(1:4, dim = c(2, 2))
y = array(5:8, dim = c(2, 2))
x
y
solve(x)
1 | 3 |
2 | 4 |
5 | 7 |
6 | 8 |
-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
col1 | col2 | col3 |
---|---|---|
a | 2 | 1 |
b | 4 | 2 |
c | 6 | 3 |
d | 8 | 4 |
e | 10 | 5 |
# 이름이 같은 열 변수가 없다면, 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
name1 | age | gender |
---|---|---|
철수 | 22 | M |
춘향 | 20 | F |
길동 | 25 | M |
name2 | blood.type |
---|---|
민수 | A |
춘향 | O |
길동 | B |
name1 | age | gender | blood.type |
---|---|---|---|
길동 | 25 | M | B |
춘향 | 20 | F | O |
name1 | age | gender | blood.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
name age gender blood.type 철수 22 M A 춘향 20 F O 길동 25 M B day no 1 50 2 60 3 55 4 52 5 65 6 58
# 각 데이터에 이름을 부여하면서 추가
listPatients = list(patients=patients, no.patients = no.patients)
listPatients
- $patients
name age gender blood.type 철수 22 M A 춘향 20 F O 길동 25 M B - $no.patients
day no 1 50 2 60 3 55 4 52 5 65 6 58
listPatients$patients # 요소명 입력
listPatients[[1]] # 인덱스 입력
listPatients[["patients"]] # 요소명을 ""에 입력
listPatients[["no.patients"]] # 요소명을 ""에 입력
name | age | gender | blood.type |
---|---|---|---|
철수 | 22 | M | A |
춘향 | 20 | F | O |
길동 | 25 | M | B |
name | age | gender | blood.type |
---|---|---|---|
철수 | 22 | M | A |
춘향 | 20 | F | O |
길동 | 25 | M | B |
name | age | gender | blood.type |
---|---|---|---|
철수 | 22 | M | A |
춘향 | 20 | F | O |
길동 | 25 | M | B |
day | no |
---|---|
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
1 | 4 | 7 |
2 | 5 | 8 |
3 | 6 | 9 |
#Apply 함수는 행렬의 행 또는 열 방향으로 특정 함수를 적용한다.
#apply(array, 방향, 함수)
#1: 행, 2: 열
apply(x, 2, function(x){2*x})
2 | 8 | 14 |
4 | 10 | 16 |
6 | 12 | 18 |
#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
name | kor | eng | mat |
---|---|---|---|
홍길동 | 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>
name | kor | eng | mat | avg | tot |
---|---|---|---|---|---|
홍길동 | 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))
Ozone | Solar.R | Wind | Temp | Month | Day |
---|---|---|---|---|---|
FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
TRUE | TRUE | FALSE | FALSE | FALSE | FALSE |
FALSE | TRUE | FALSE | FALSE | FALSE | FALSE |
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
Ozone | Solar.R | Wind | Temp | Month | Day | |
---|---|---|---|---|---|---|
1 | 41 | 190 | 7.4 | 67 | 5 | 1 |
2 | 36 | 118 | 8.0 | 72 | 5 | 2 |
3 | 12 | 149 | 12.6 | 74 | 5 | 3 |
4 | 18 | 313 | 11.5 | 62 | 5 | 4 |
6 | 28 | NA | 14.9 | 66 | 5 | 6 |
7 | 23 | 299 | 8.6 | 65 | 5 | 7 |
8 | 19 | 99 | 13.8 | 59 | 5 | 8 |
9 | 8 | 19 | 20.1 | 61 | 5 | 9 |
11 | 7 | NA | 6.9 | 74 | 5 | 11 |
12 | 16 | 256 | 9.7 | 69 | 5 | 12 |
13 | 11 | 290 | 9.2 | 66 | 5 | 13 |
14 | 14 | 274 | 10.9 | 68 | 5 | 14 |
15 | 18 | 65 | 13.2 | 58 | 5 | 15 |
16 | 14 | 334 | 11.5 | 64 | 5 | 16 |
17 | 34 | 307 | 12.0 | 66 | 5 | 17 |
18 | 6 | 78 | 18.4 | 57 | 5 | 18 |
19 | 30 | 322 | 11.5 | 68 | 5 | 19 |
20 | 11 | 44 | 9.7 | 62 | 5 | 20 |
21 | 1 | 8 | 9.7 | 59 | 5 | 21 |
22 | 11 | 320 | 16.6 | 73 | 5 | 22 |
23 | 4 | 25 | 9.7 | 61 | 5 | 23 |
24 | 32 | 92 | 12.0 | 61 | 5 | 24 |
28 | 23 | 13 | 12.0 | 67 | 5 | 28 |
29 | 45 | 252 | 14.9 | 81 | 5 | 29 |
30 | 115 | 223 | 5.7 | 79 | 5 | 30 |
31 | 37 | 279 | 7.4 | 76 | 5 | 31 |
38 | 29 | 127 | 9.7 | 82 | 6 | 7 |
40 | 71 | 291 | 13.8 | 90 | 6 | 9 |
41 | 39 | 323 | 11.5 | 87 | 6 | 10 |
44 | 23 | 148 | 8.0 | 82 | 6 | 13 |
... | ... | ... | ... | ... | ... | ... |
123 | 85 | 188 | 6.3 | 94 | 8 | 31 |
124 | 96 | 167 | 6.9 | 91 | 9 | 1 |
125 | 78 | 197 | 5.1 | 92 | 9 | 2 |
126 | 73 | 183 | 2.8 | 93 | 9 | 3 |
127 | 91 | 189 | 4.6 | 93 | 9 | 4 |
128 | 47 | 95 | 7.4 | 87 | 9 | 5 |
129 | 32 | 92 | 15.5 | 84 | 9 | 6 |
130 | 20 | 252 | 10.9 | 80 | 9 | 7 |
131 | 23 | 220 | 10.3 | 78 | 9 | 8 |
132 | 21 | 230 | 10.9 | 75 | 9 | 9 |
133 | 24 | 259 | 9.7 | 73 | 9 | 10 |
134 | 44 | 236 | 14.9 | 81 | 9 | 11 |
135 | 21 | 259 | 15.5 | 76 | 9 | 12 |
136 | 28 | 238 | 6.3 | 77 | 9 | 13 |
137 | 9 | 24 | 10.9 | 71 | 9 | 14 |
138 | 13 | 112 | 11.5 | 71 | 9 | 15 |
139 | 46 | 237 | 6.9 | 78 | 9 | 16 |
140 | 18 | 224 | 13.8 | 67 | 9 | 17 |
141 | 13 | 27 | 10.3 | 76 | 9 | 18 |
142 | 24 | 238 | 10.3 | 68 | 9 | 19 |
143 | 16 | 201 | 8.0 | 82 | 9 | 20 |
144 | 13 | 238 | 12.6 | 64 | 9 | 21 |
145 | 23 | 14 | 9.2 | 71 | 9 | 22 |
146 | 36 | 139 | 10.3 | 81 | 9 | 23 |
147 | 7 | 49 | 10.3 | 69 | 9 | 24 |
148 | 14 | 20 | 16.6 | 63 | 9 | 25 |
149 | 30 | 193 | 6.9 | 70 | 9 | 26 |
151 | 14 | 191 | 14.3 | 75 | 9 | 28 |
152 | 18 | 131 | 8.0 | 76 | 9 | 29 |
153 | 20 | 223 | 11.5 | 68 | 9 | 30 |
mean(air_narm$Ozone) # 결측값이 제거된 데이터에서는 mean 함수가 정상적으로 동작함.
42.1293103448276
# na.omit 함수를 이용해 결측값 처리하기
air_narm1 = na.omit(airquality)
mean(air_narm1$Ozone)
42.0990990990991