IF ELSE: quadratic equation
a=1
b=8
c=5
delta=b^2-4*a*c
if(delta>0){
roots=c((-b+sqrt(delta))/(2*a),
(-b-sqrt(delta))/(2*a))
}else{
if(delta==0){
roots=-b/(2*a)
}else{
roots=c("Has no real roots")
}
}
print(roots)
## [1] -0.6833752 -7.3166248
FOR: calculate difference between any two consecutive values
x=rnorm(1000)
y=numeric(1000) # or y=rep(NA,1000)
for(i in 2:1000){
y[i]=x[i]-x[i-1]
}
cor(x,y,method="pearson")
## [1] 0.6928525
plot(y)
FOR: multiplication table
m=matrix(NA,10,10)
for(i in 1:10){
for(j in 1:10){
m[i,j]=i*j
}
}
m
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 1 2 3 4 5 6 7 8 9 10
## [2,] 2 4 6 8 10 12 14 16 18 20
## [3,] 3 6 9 12 15 18 21 24 27 30
## [4,] 4 8 12 16 20 24 28 32 36 40
## [5,] 5 10 15 20 25 30 35 40 45 50
## [6,] 6 12 18 24 30 36 42 48 54 60
## [7,] 7 14 21 28 35 42 49 56 63 70
## [8,] 8 16 24 32 40 48 56 64 72 80
## [9,] 9 18 27 36 45 54 63 72 81 90
## [10,] 10 20 30 40 50 60 70 80 90 100
WHILE: print i^2 for i<10
i=1
while(i<10){
print(i^2)
i=i+1
}
## [1] 1
## [1] 4
## [1] 9
## [1] 16
## [1] 25
## [1] 36
## [1] 49
## [1] 64
## [1] 81
i=1
while(i<5){
print(i/2)
if(i==3){
print("three")
}
i=i+1
}
## [1] 0.5
## [1] 1
## [1] 1.5
## [1] "three"
## [1] 2
longitudinal data: impute with subject-specific regression
id=rep(1:3,each=5)
time=rep(1:5,3)
bmi=c(19.7,20.2,20.4,NA,21.1,19.1,19.8,22.3,NA,23.4,NA,20.8,20.9,NA,22.8)
data=data.frame(id,time,bmi)
imp.bmi<- c()
for( i in 1:3){
d1<- subset(data,id==i)
f<- lm(bmi~time,data=d1)
pred.f<- f$coefficients[1]+f$coefficients[2]*d1$time
imp.bmi<- c(imp.bmi,ifelse (is.na(d1$bmi)==TRUE,pred.f,d1$bmi))
}
data.imp<- cbind(data,imp.bmi=imp.bmi)
head(data.imp)
## id time bmi imp.bmi
## 1 1 1 19.7 19.70000
## 2 1 2 20.2 20.20000
## 3 1 3 20.4 20.40000
## 4 1 4 NA 20.77143
## 5 1 5 21.1 21.10000
## 6 2 1 19.1 19.10000
longitudinal data: for each case show row with maximum bmi
id=rep(1:3,each=5)
time=rep(1:5,3)
bmi=c(19.7,20.2,20.4,NA,21.1,19.1,19.8,22.3,NA,23.4,NA,20.8,20.9,NA,22.8)
data=data.frame(id,time,bmi)
mydata=c()
for (i in 1:3){
d1=subset(data,id==i)
if(any(is.na(d1$bmi)==FALSE)){
mydata=rbind(mydata,subset(d1,time==which.max(d1$bmi)))
}
}
mydata
## id time bmi
## 5 1 5 21.1
## 10 2 5 23.4
## 15 3 5 22.8
longitudinal data: lag function
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
id=rep(1:3,each=5)
time=rep(1:5,3)
bmi=c(19.7,20.2,20.4,25,21.1,19.1,19.8,22.3,25,23.4,25,20.8,20.9,25,22.8)
data=data.frame(id,time,bmi)
data <-
data %>%
group_by(id) %>%
mutate(lagbmi=dplyr::lag(bmi, n = 1, default = NA))
data
## # A tibble: 15 x 4
## # Groups: id [3]
## id time bmi lagbmi
## <int> <int> <dbl> <dbl>
## 1 1 1 19.7 NA
## 2 1 2 20.2 19.7
## 3 1 3 20.4 20.2
## 4 1 4 25 20.4
## 5 1 5 21.1 25
## 6 2 1 19.1 NA
## 7 2 2 19.8 19.1
## 8 2 3 22.3 19.8
## 9 2 4 25 22.3
## 10 2 5 23.4 25
## 11 3 1 25 NA
## 12 3 2 20.8 25
## 13 3 3 20.9 20.8
## 14 3 4 25 20.9
## 15 3 5 22.8 25
longitudinal data: another approach for lag function
id=rep(1:3,each=5)
time=rep(1:5,3)
bmi=c(19.7,20.2,20.4,25,21.1,19.1,19.8,22.3,25,23.4,25,20.8,20.9,25,22.8)
data=data.frame(id,time,bmi)
lagbmi=c()
lagbmi0=c()
for(i in 1:3){
d1<- subset(data,id==i)
lagbmi= c(lagbmi,c(NA,d1$bmi[-1]))
}
data=data.frame(data,lagbmi)
data
## id time bmi lagbmi
## 1 1 1 19.7 NA
## 2 1 2 20.2 20.2
## 3 1 3 20.4 20.4
## 4 1 4 25.0 25.0
## 5 1 5 21.1 21.1
## 6 2 1 19.1 NA
## 7 2 2 19.8 19.8
## 8 2 3 22.3 22.3
## 9 2 4 25.0 25.0
## 10 2 5 23.4 23.4
## 11 3 1 25.0 NA
## 12 3 2 20.8 20.8
## 13 3 3 20.9 20.9
## 14 3 4 25.0 25.0
## 15 3 5 22.8 22.8