Άννα Μοσχά Κέντρο Η/Υ, Ε.Μ.Π.
> CircleArea <- function(radius) {
+ radius*radius*pi
+ }
> CircleArea(10)
[1] 314.1593
> CircleArea
function(radius) {
radius*radius*pi
}
> CircleArea()
Error in CircleArea() : argument "radius" is missing, with no default
Παρατηρήστε ότι η συνάρτηση έχει όρισμα το radius.
H R όταν αλλάζω σειρά το καταλαβαίνει αυτόματα και προσθέτει το "+" εφόσον δεν έχει τελειώσει η εντολή που δίνω.
Επίσης, γράφω στην κονσόλα CircleArea(10) δίνοντας τον αριθμό 10 για radious και παίρνω το αποτέλεσμα, ενώ, αν γράψω το όνομα της μεταβλητής CircleArea χωρίς να δώσω όρισμα παίρνω την συνάρτηση
> a=c(1,2,3,4,5)
> CircleArea(a)
[1] 3.141593 12.566371 28.274334 50.265482 78.539816
> plot(a, CircleArea(a)) # Σχεδιάζει απλό διάγραμμα
> sayhello <- function(){
+ print("What's your name?")
+ y<-scan(what=character())
+ print(paste("Hello", y, sep=" "))}
> sayhello()
[1] "What's your name?"
1: Anna
2:
Read 1 item
[1] "Hello Anna"
> for (i in 1:5) print(i^2)
[1] 1
[1] 4
[1] 9
[1] 16
[1] 25
Καλό είναι να αποφεύγεται η χρήση του for loop γιατί είναι αργός τρόπος εκτέλεσης εντολών.
> y<-c(-3,5,-5,20,-12,25,0)
> for (i in 1:length(y)) { if(y[i] < 0) y[i] <- 0 }
> y
[1] 0 5 0 20 0 25 0
ή πιο άμεσα με:
> y<-c(-3,5,-5,20,-12,25,0)
> y [y < 0] <- 0
> y
[1] 0 5 0 20 0 25 0
> count <- 0
> while(count < 5) {
+ print(count)
+ count <- count + 1
+ }
[1] 0
[1] 1
[1] 2
[1] 3
[1] 4
if (expr_1) expr_2 else expr_3
if(<condition>) {
## do something
} else {
## do something else
}
if(<condition1>) {
## do something
} else if(<condition2>) {
## do something different
} else {
## do something different
}
> y<-c(-3,5,-5,20,-12,25,0)
> z <- ifelse (y < 0, -1, 1)
> z
[1] -1 1 -1 1 -1 1 1
> y<-c(-3,5,-5,20,-12,25,0)
> k <- ifelse (y < 0, -y, y)
> k
[1] 3 5 5 20 12 25 0
> x <- list(a = 1:5, b = rnorm(7))
> x
$a
[1] 1 2 3 4 5
$b
[1] -1.4970726 1.2392563 0.0376222 -1.0396169 0.1536675 -1.0476383 0.7007813
Η συνάρτηση rnorm(n, mean = 0, sd = 1) δίνει n τυχαίους αριθμούς που ακολουθούν κανονική κατανομή με μέση τιμή mean και τυπική απόκλιση sd. (Αν δεν αναφέρονται η μέση τιμή κι η τυπική απόκλιση αυτές έχουν τιμές 0 και 1 αντίστοιχα)
> lapply(x, mean)
$a
[1] 3
$b
[1] -0.2075715
> sapply(x, mean)
a b
3.0000000 -0.2075715
> x <- c(rnorm(10), runif(10), rnorm(10, 1))
> x
[1] -0.7153926 -0.1629948 -0.3993989 -0.5818607 0.2353145 1.0336660 0.4376461
[8] 1.3929560 -0.8899093 1.3994929 0.6027795 0.7252116 0.1695369 0.2199983
[15] 0.7804880 0.5629266 0.9183624 0.8898196 0.4162223 0.2931080 0.4652940
[22] 1.6527642 1.4594740 2.2958663 0.2243324 -0.6386001 1.4165570 1.0988965
[29] 2.0528085 1.2376103
Παρατηρούμε ότι το διάνυσμα περιέχει 3 ομάδες - υποσύνολα. Εγώ θέλω την μέση τιμή κάθε μίας ομάδας του διανύσματος ξεχωριστά.
> f <- gl(3, 10)
> f
[1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3
Levels: 1 2 3
> tapply(x, f, mean)
1 2 3
0.1749519 0.5578453 1.1265003
> tapply(x, rep(1:3, each=10), mean)
1 2 3
0.1749519 0.5578453 1.1265003
> tapply(x, f, range)
$`1`
[1] -0.8899093 1.3994929
$`2`
[1] 0.1695369 0.9183624
$`3`
[1] -0.6386001 2.2958663
Η συνάρτηση range() μας δίνει ως αποτέλεσμα δύο τιμές την μέγιστη(max) και την ελάχιστη(min) τιμή ενός διανύσματος.
> total
id sex height smoking weight
1 Marc Male 180 TRUE 80
2 Mary Female 160 FALSE 60
3 Kelly Female 167 FALSE 65
4 George Male 175 TRUE 100
5 Peter Male 190 FALSE 85
6 John Male 195 FALSE 95
> tapply(total$height, total$sex, mean)
Female Male
163.5 185.0
> tapply(total$w, total$smoking, mean)
FALSE TRUE
76.25 90.00
> tapply(total$h, total$smoking, max)
FALSE TRUE
195 180
> c(mean(total$h), mean(total$w))
[1] 177.83333 80.83333
> apply(total[,c(3,5)],2,mean)
height weight
177.83333 80.83333
Χρησιμοποίσαμε το dataframe ως πίνακα
> apply(total[,c("height", "weight")],2,mean)
height weight
177.83333 80.83333
Παράδειγμα:
> a<-c(1,2,3,4,NA,NA)
> is.na(a)
[1] FALSE FALSE FALSE FALSE TRUE TRUE
> sum(is.na(a))
[1] 2
Παρατηρήστε ότι η is.na() μας δίνει ποιες τιμές είναι ΝΑ, επιστρέφει ένα διάνυσμα λογικής. Αθροίζοντας αυτές τις τιμές παίρνουμε το σύνολο των Missing values. (False-->0, True-->1)
Παράδειγμα:
> a<-c(1,2,3,4,NA,NA)
> complete.cases(a)
[1] TRUE TRUE TRUE TRUE FALSE FALSE
> sum(complete.cases(a))
[1] 4
> length(a)
[1] 6
Παρατηρήστε ότι η complete.cases() μας δίνει ποιες τιμές ΔΕΝ είναι ΝΑ, επιστρέφει κι αυτή ένα διάνυσμα λογικής. Αθροίζοντας αυτές τις τιμές παίρνουμε το σύνολο αυτών που ΔΕΝ είναι Missing values. (False-->0, True-->1) Αν γνωρίζουμε και το μήκος του διανύσματος κάνοντας την αφαίρεση μπορούμε να βρούμε το σύνολο των Missing values. Στο παραπάνω παράδειγμα 6-4=2 NA.
Παράδειγμα:
> a<-c(1,2,3,4,NA,NA)
> which(is.na(a))
[1] 5 6
Παρατηρήστε ότι στο παράδειγμα μας η 5η και η 6η τιμή του διανύσματος a είναι ΝΑ.
myfunction<-function(){
x=rnorm(100)
mean(x)
}
> dir()
[1] "a.R"
[2] "complete.R"
.....................................................
[17] "myfirstcode.r"
[18] "mygradesmm2014.txt"
......................................................
[30] "x.txt"
Βλέπω όλα τα αρχεία που είναι στο working directory μου στα οποία μπορώ να αναφερθώ χωρίς να γράψω όλο το path του αρχείου. Ομοίως τα βλέπω και από την καρτέλα Files του RStudio.
> myfunction()
Error: could not find function "myfunction"
> source("myfirstcode.r")
> myfunction()
[1] 0.1123094
> myfunction
function(){
x=rnorm(100)
mean(x)
}
Παρατηρήστε ότι αν γράψω στην κονσόλα myfunction() πριν φορτώσω και εκτελέσω το script, παίρνω error γιατί δεν αναγνωρίζει το αντικείμενο. Από τη στιγμή που εκτελεστεί το script γράφοντας στην κονσόλα myfunction() παίρνω το αποτέλεσμα του κώδικα ενώ γράφοντας myfunction παίρνω την συνάρτηση
> z<-read.table(file="mmgrades2014.csv",header=T, sep=",")
> z
ID_number Sex X.Course_total Technical_English EAP Exam Final_mark
1 mm12023 M 65.80 2.0 1 4.0 7
2 mm12038 M 77.67 2.0 0 3.6 6
3 mm12054 M 86.75 2.0 0 2.5 2
.......................................................................
Διαβάζει το file mmgrades2014.csv που βρίσκεται στο working directory (αλλιώς βάζω όλο το path του αρχείου). Η πρώτη σειρά του αρχείου περιέχει τα ονόματα των μεταβλητών (έχει Header) και χωρίζονται μεταξύ τους με το ",".
> x<-read.table("clipboard",header=T, sep=",")
> x
ID_number Sex X.Course_total Technical_English EAP Exam Final_mark
1 mm12023 M 65.80 2.0 1 4.0 7
2 mm12038 M 77.67 2.0 0 3.6 6
3 mm12054 M 86.75 2.0 0 2.5 2
......................................................................
Διαβάζει πίνακα δεδομένων από το clipboard τον οποίο το έχω κάνει copy από το csv file (το έχω ανοίξει από κάποιον text editor).
> f<-read.table("clipboard", header=T, sep="")
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,
line 14 did not have 7 elements
> f<-read.table("clipboard", header=T,sep="",fill=T)
> f
ID number Sex Course total Technical English EAP
1 mm12023 M 65.80 % 2.0 1 4.0 7
2 mm12038 M 77.67 % 2.0 0 3.6 6
3 mm12054 M 86.75 % 2.0 0 2.5 2
...........................................................
Παρατηρήστε ότι το sep="" , αυτό είναι το white space δηλ. κάποιο οποιοδήποτε κενό.Αν κάνω copy τα δεδομένα από το Excel παίρνω το παραπάνω error που μου λέει ότι η 14 γραμμή έχει κάποια κενά. Το διορθώνω βάζοντας fill=TRUE
> t<-read.csv(file="mmgrades2014.csv", header=T, sep=",")
> t
ID_number Sex X.Course_total Technical_English EAP Exam Final_mark
1 mm12023 M 65.80 2.0 1 4.0 7
2 mm12038 M 77.67 2.0 0 3.6 6
.......................................................................
Ομοίως διαβάζει το file mmgrades2014.csv που βρίσκεται στο working directory
> names(z)
[1] "ID_number" "Sex" "X.Course_total" "Technical_English"
[5] "EAP" "Exam" "Final_mark"
Παρατηρήστε ότι η R δεν δέχεται τα ονόματα των μεταβλητών να αρχίζουν από σύμβολο ή αριθμό για αυτό και τα αλλάζει κατάλληλα. Όμοια δεν καταλαβαίνει τα κενά μεταξύ του ονόματος μιας μεταβλητής
> names(z)[3]<-"Course_total_%"
> str(z)
'data.frame': 47 obs. of 7 variables:
$ ID_number : Factor w/ 47 levels "mm06060","mm07041",..: 21 28 38 47 27 6 37 30 13 22 ...
$ Sex : Factor w/ 2 levels "F","M": 2 2 2 1 1 1 1 1 2 1 ...
$ Course_total_% : num 65.8 77.67 86.75 3.33 84.13 ...
$ Technical_English: num 2 2 2 0 2 2 1.8 2 2 2 ...
$ EAP : int 1 0 0 0 1 0 0 0 0 0 ...
$ Exam : num 4 3.6 2.5 2.5 6.6 3.9 1.3 1 3.5 4.6 ...
$ Final_mark : int 7 6 2 2 10 6 2 1 6 7 ...
Αλλάξαμε το όνομα της 3η μεταβλητής κατάλληλα και πήραμε πληροφορίες για όλη την δομή του πλαισίου δεδομένων με την str(). Παρατηρήστε ότι όλες τις μεταβλητές που περιέχουν αριθμούς τις οριζει ως αριθμητικές αλλά όσες δεν περιέχουν αριθμό τις θεωρεί factors. Αυτό μπορούμε να το αλλάξουμε.
> z$ID_number<-as.character(z$ID_number)
> str(z)
'data.frame': 47 obs. of 7 variables:
$ ID_number : chr "mm12023" "mm12038" "mm12054" "mm12554" ...
$ Sex : Factor w/ 2 levels "F","M": 2 2 2 1 1 1 1 1 2 1 ...
$ Course_total_% : num 65.8 77.67 86.75 3.33 84.13 ...
$ Technical_English: num 2 2 2 0 2 2 1.8 2 2 2 ...
$ EAP : int 1 0 0 0 1 0 0 0 0 0 ...
$ Exam : num 4 3.6 2.5 2.5 6.6 3.9 1.3 1 3.5 4.6 ...
$ Final_mark : int 7 6 2 2 10 6 2 1 6 7 ...
Θέσαμε την μεταβλητή ID_number τύπου character
> obesity<-read.csv("Obes-phys-acti-diet-eng-2014-tab_CSV.csv", skip=4, nrows=12)
> str(obesity)
'data.frame': 12 obs. of 12 variables:
$ X : Factor w/ 12 levels "","2002/03","2003/04",..: 1 2 3 4 5 6 7 8 9 10 ...
$ Total : Factor w/ 12 levels "","10,571","10,957",..: 1 6 7 8 9 10 11 12 2 4 ...
$ Males : Factor w/ 12 levels "","1,047","1,405",..: 1 9 10 11 12 2 3 4 5 6 ...
$ Females: Factor w/ 12 levels "","1,213","1,442",..: 1 10 2 3 4 5 6 7 9 11 ...
$ X.1 : logi NA NA NA NA NA NA ...
$ X.2 : logi NA NA NA NA NA NA ...
$ X.3 : logi NA NA NA NA NA NA ...
$ X.4 : logi NA NA NA NA NA NA ...
$ X.5 : logi NA NA NA NA NA NA ...
$ X.6 : logi NA NA NA NA NA NA ...
$ X.7 : logi NA NA NA NA NA NA ...
$ X.8 : logi NA NA NA NA NA NA ...
Διαβάζω το αρχείο τύπου csv που έχω αποθηκεύσει στο working directory μου λέγοντας να παραλείψει τις πρώτες 4 γραμμές και να διαβάσει μόνο τις 12 γραμμές. By default τα δεδομένα χωρίζονται με κόμμα και περιέχεται επικεφαλίδα. Με την str(obesity) βλέπω την δομή του data frame obesity και παρατηρώ κάποια τυπικά λάθη.
> obesity$Males<- as.numeric(as.character(gsub(",","",obesity$Males)))
> obesity$Females<- as.numeric(as.character(gsub(",","",obesity$Females)))
> obesity
X Total Males Females X.1 X.2 X.3 X.4 X.5 X.6 X.7 X.8
1 NA NA NA NA NA NA NA NA NA NA
2 2002/03 1,275 427 848 NA NA NA NA NA NA NA NA
3 2003/04 1,711 498 1213 NA NA NA NA NA NA NA NA
4 2004/05 2,035 589 1442 NA NA NA NA NA NA NA NA
5 2005/06 2,564 746 1786 NA NA NA NA NA NA NA NA
..................................................................
Χρησιμοποιώ την global substitute και όχι την sub() γιατί η δεύτερη αντικαθιστά μόνο το πρώτο που θα βρει και όχι όλα. Αντικαθιστώ το κόμμα με τίποτα στην μεταβλητή obesity$Males. Για να την μετατρέψω από factor σε numeric πρέπει πρώτα να την μετατρέψω σε τύπου character.
Ομοίως και για την μεταβλητή obesity$Females
> obesity
X Total Males Females X.1 X.2 X.3 X.4 X.5 X.6 X.7 X.8
1 NA NA NA NA NA NA NA NA NA NA
2 2002/03 1,275 427 848 NA NA NA NA NA NA NA NA
3 2003/04 1,711 498 1213 NA NA NA NA NA NA NA NA
4 2004/05 2,035 589 1442 NA NA NA NA NA NA NA NA
5 2005/06 2,564 746 1786 NA NA NA NA NA NA NA NA
6 2006/07 3,862 1047 2807 NA NA NA NA NA NA NA NA
7 2007/08 5,018 1405 3613 NA NA NA NA NA NA NA NA
8 2008/09 7,988 2077 5910 NA NA NA NA NA NA NA NA
9 2009/10 10,571 2495 8074 NA NA NA NA NA NA NA NA
10 2010/11 11,574 2919 8654 NA NA NA NA NA NA NA NA
11 2011/12 11,736 2993 8740 NA NA NA NA NA NA NA NA
12 2012/13 10,957 2950 8007 NA NA NA NA NA NA NA NA
> obesity<-obesity[-1, c(-2,-5:-12)]
Σβήνουμε την 1η γραμμή, την 2η στήλη που περιέχει το άθροισμα των Males και Females και όλες τις τελευταίες στήλες από την 5 έως την 12η
> obesity
X Males Females
2 2002/03 427 848
3 2003/04 498 1213
4 2004/05 589 1442
5 2005/06 746 1786
6 2006/07 1047 2807
7 2007/08 1405 3613
8 2008/09 2077 5910
9 2009/10 2495 8074
10 2010/11 2919 8654
11 2011/12 2993 8740
12 2012/13 2950 8007
> install.packages("reshape2") # εγκαθιστώ το πακέτο
Installing package into ‘/home/anna/R/x86_64-pc-linux-gnu-library/3.1’
(as ‘lib’ is unspecified)
.......................................................................
> library("reshape2") # ενεργοποιώ το πακέτο
> obesitylong<-melt(obesity)
Using X as id variables
> obesitylong
X variable value
1 2002/03 Males 427
2 2003/04 Males 498
3 2004/05 Males 589
4 2005/06 Males 746
5 2006/07 Males 1047
6 2007/08 Males 1405
7 2008/09 Males 2077
8 2009/10 Males 2495
9 2010/11 Males 2919
10 2011/12 Males 2993
11 2012/13 Males 2950
12 2002/03 Females 848
13 2003/04 Females 1213
14 2004/05 Females 1442
15 2005/06 Females 1786
16 2006/07 Females 2807
17 2007/08 Females 3613
18 2008/09 Females 5910
19 2009/10 Females 8074
20 2010/11 Females 8654
21 2011/12 Females 8740
22 2012/13 Females 8007
wide format : obesity | long format : obesitylong |
---|---|
|
|
> z
ID_number Sex Course_total_% Technical_English EAP Exam Final_mark
1 mm12023 M 65.80 2.0 1 4.0 7
2 mm12038 M 77.67 2.0 0 3.6 6
3 mm12054 M 86.75 2.0 0 2.5 2
4 mm12554 F 3.33 0.0 0 2.5 2
5 mm12035 F 84.13 2.0 1 6.6 10
6 mm11054 F 67.09 2.0 0 3.9 6
7 mm12053 F 68.64 1.8 0 1.3 2
8 mm12040 F 91.94 2.0 0 1.0 1
9 mm12011 M 86.83 2.0 0 3.5 6
10 mm12024 F 83.24 2.0 0 4.6 7
11 mm12044 F 86.98 2.0 1 4.6 8
12 mm12033 M 81.27 2.0 0 4.8 3
13 mm07041 F 74.90 2.0 0 1.5 2
14 mm12022 M 90.85 2.0 0 4.9 NA
15 mm12553 M 76.17 2.0 0 2.9 3
.......................................................................
Παρατηρούμε ότι η μεταβλητή Final_mark περιέχει NA
> z$Final_mark[z$Final_mark>6.8]
[1] 7 10 7 8 NA 7 7 7 8 NA 10 8 7 7 9 7 7 8 7 8
Μας δίνει όλους τους Final_mark που είναι πάνω από 6.8 μαζί και τα NA
> length(z$Final_mark[z$Final_mark>6.8])
[1] 20
Μας δίνει πόσοι είναι οι Final_mark που είναι πάνω από 6.8 (υπολογίζει και τα NA)
> length(complete.cases(z$Final_mark[z$Final_mark>6.8]))
[1] 20
Επίσης μας δίνει πόσοι είναι οι Final_mark που είναι πάνω από 6.8 υπολογίζοντας και τα NA. Η complete.cases() επιστρέφει ένα διάνυσμα το μήκος του οποίου είναι 20.
> complete.cases(z$Final_mark[z$Final_mark>6.8])
[1] TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE
[14] TRUE TRUE TRUE TRUE TRUE TRUE TRUE
Μας δίνει ποια από τα Final_mark είναι ή όχι NA (logical TRUE or FALSE)
> sum(complete.cases(z$Final_mark[z$Final_mark>6.8]))
[1] 18
Μας δίνει πραγματικά πόσοι είναι οι Final_mark που είναι πάνω από 6.8 χωρίς να υπολογίζει και τα NA(Τα logical TRUE->1 και FALSE->0)
> sum(is.na(z$Final_mark[z$Final_mark>6.8]))
[1] 2
Αλλιώς, θα μπορούσαμε να αφαιρέσουμε από το σύνολο των Final_mark που είναι πάνω από 6.8 (μαζί και τα NA) το σύνολο των ΝΑ 20-2=18.
> z$Final>6.8
[1] TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE NA
[15] FALSE TRUE FALSE TRUE TRUE FALSE FALSE TRUE FALSE FALSE FALSE NA TRUE TRUE
[29] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
[43] FALSE FALSE TRUE TRUE FALSE
> sum(z$Final>6.8)
[1] NA
> sum(z$Final>6.8, na.rm=TRUE)
[1] 18
Ο έλεγχος της συνθήκης ποιοι βαθμοί είναι πάνω από 6.8 μας επιστρέφει ένα διάνυσμα λογικής, μπορώ να το αθροίσω για να έχω το σύνολο των βαθμολογιών που είναι μεγαλύτερες από 6.8. Επειδή υπάρχουν ΝΑ, η συνάρτηση sum() επιστρέφει NA. Μπορώ να της ορίσω να μην μετρήσει τα ΝΑ δίνοντας na.rm=TRUE οπότε έχω το αποτέλεσμα. Στην συνάρτηση length() δεν μπορώ να ορίσω κάτι ανάλογο.
> cut(z$Final, breaks=c(1,5,7,9,10), include.lowest=TRUE, right=FALSE, ordered_result=TRUE )
[1] [7,9) [5,7) [1,5) [1,5) [9,10] [5,7) [1,5) [1,5) [5,7) [7,9) [7,9)
[12] [1,5) [1,5) [1,5) [7,9) [5,7) [7,9) [7,9) [1,5) [5,7) [7,9)
[23] [1,5) [1,5) [1,5) [9,10] [7,9) [1,5) [1,5) [1,5) [7,9) [5,7)
[34] [5,7) [1,5) [5,7) [5,7) [7,9) [9,10] [7,9) [7,9) [7,9) [1,5) [5,7)
[45] [7,9) [7,9) [5,7)
Levels: [1,5) < [5,7) < [7,9) < [9,10]
Χωρίζω την μεταβλητή Final_mark που περιέχει την βαθμολογία από το 1 έως το 10 στα διαστήματα [1,5), [5,7), [7,9) και [9,10], το κάτω άκρο των διαστημάτων να περιέχεται στο διάστημα ενώ το πάνω άκρο όχι (εκτός από το τελευταίο διάστημα που είναι και πάνω κλειστό). Το αποτέλεσμα είναι τύπου factor και με διάταξη.
> Letter_Final_mark<-cut(z$Final, breaks=c(1,5,7,9,10),labels=c("D", "C", "B","A"),
include.lowest=TRUE, right=FALSE, ordered_result=TRUE )
> Letter_Final_mark
[1] B C D D A C D D C B B D D D B C
[18] B B D C B D D D A B D D D B C C
[35] D C C B A B B B D C B B C
Levels: D < C < B < A
> class(Letter_Final_mark)
[1] "ordered" "factor"
Σε κάθε διάστημα [1,5), [5,7), [7,9) και [9,10] αντιστοιχώ ως labels τα γράμματα D, C, B, A και κρατώ το αποτέλεσμα της cut() σε μια μεταβλητή Letter_Final_mark. Παρατηρώ ότι η μεταβλητή είναι τύπου ordered factor.
> z$Letter_Final_mark<-Letter_Final_mark
> z
ID_number Sex Course_total_% Technical_English EAP Exam Final_mark Letter_Final_mark
1 mm12023 M 65.80 2.0 1 4.0 7 B
2 mm12038 M 77.67 2.0 0 3.6 6 C
3 mm12054 M 86.75 2.0 0 2.5 2 D
4 mm12554 F 3.33 0.0 0 2.5 2 D
5 mm12035 F 84.13 2.0 1 6.6 10 A
6 mm11054 F 67.09 2.0 0 3.9 6 C
.........................................................................................
Προσθέτω την μεταβλητή που μόλις δημιούργησα στο dataframe z με το ίδιο όνομα και βλέπω το νέο z που περιέχει μία ακόμη στήλη.
> z$New1<-NA
> z
ID_number Sex Course_total_% Technical_English EAP Exam Final_mark Letter_Final_mark New1
1 mm12023 M 65.80 2.0 1 4.0 7 B NA
2 mm12038 M 77.67 2.0 0 3.6 6 C NA
3 mm12054 M 86.75 2.0 0 2.5 2 D NA
4 mm12554 F 3.33 0.0 0 2.5 2 D NA
.............................................................................................
> z<-z[-9] # Την σβήνω για να επανέλθω στην προηγούμενη κατάσταση
> z$New2<-z$Final_mark
> z
ID_number Sex Course_total_% Technical_English EAP Exam Final_mark Letter_Final_mark New2
1 mm12023 M 65.80 2.0 1 4.0 7 B 7
2 mm12038 M 77.67 2.0 0 3.6 6 C 6
3 mm12054 M 86.75 2.0 0 2.5 2 D 2
4 mm12554 F 3.33 0.0 0 2.5 2 D 2
..............................................................................................
> z<-z[-9] # Την σβήνω για να επανέλθω στην προηγούμενη κατάσταση
> t<-c(1,2,3,4,5)
> write(t, "t.txt")
Αποθηκεύει το διάνυσμα t σ' ένα αρχείο με όνομα t.txt στο working directory. Αν θέλω να το αποθηκεύσω αλλού βάζω όλο το path του αρχείου.
> m <- matrix(1:10, ncol = 5)
> m
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
> write(m, "m.txt")
> scan("m.txt")
Read 10 items
[1] 1 2 3 4 5 6 7 8 9 10
> j<-matrix(scan("m.txt"), ncol=5)
Read 10 items
> j
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
Με την write() αποθηκεύει τον πίνακα m σ' ένα αρχείο ως διάνυσμα (by coloumn). Aν τον διαβάσουμε από το αρχείο απλά ( με την εντολή scan()) δεν είναι πίνακας θα πρέπει να τον μετατρέψουμε εμείς.
> write.table(z, "mygradesmm2014.txt")
> read.table("mygradesmm2014.txt")
ID_number Sex Course_total_. Technical_English EAP Exam Final_mark Letter_Final_mark
1 mm12023 M 65.80 2.0 1 4.0 7 B
2 mm12038 M 77.67 2.0 0 3.6 6 C
3 mm12054 M 86.75 2.0 0 2.5 2 D
4 mm12554 F 3.33 0.0 0 2.5 2 D
........................................................................................
Aποθηκεύει το data frame z σε ένα txt αρχείο στο working directory. Στη συνέχεια με read.table() μπορούμε να το διαβάσουμε.
> write.csv(z, "mygradesmm2014.csv")
> read.csv("mygradesmm2014.csv")
X ID_number Sex Course_total_. Technical_English EAP Exam Final_mark Letter_Final_mark
1 1 mm12023 M 65.80 2.0 1 4.0 7 B
2 2 mm12038 M 77.67 2.0 0 3.6 6 C
3 3 mm12054 M 86.75 2.0 0 2.5 2 D
4 4 mm12554 F 3.33 0.0 0 2.5 2 D
.........................................................................
> write.csv(z, "mygradesmm2014.csv", row.names=FALSE)
> read.csv("mygradesmm2014.csv")
ID_number Sex Course_total_. Technical_English EAP Exam Final_mark Letter_Final_mark
1 mm12023 M 65.80 2.0 1 4.0 7 B
2 mm12038 M 77.67 2.0 0 3.6 6 C
3 mm12054 M 86.75 2.0 0 2.5 2 D
4 mm12554 F 3.33 0.0 0 2.5 2 D
.......................................................................................
Aποθηκεύει το data frame z σε ένα csv αρχείο στο working directory. Στη συνέχεια με read.table() μπορούμε να το διαβάσουμε. Αν δεν του ορίσουμε row.names=FALSE αποθηκεύει το όνομα των γραμμών ως δεδομένο. (Στην πρώτη περίπτωση δημιούργησε μία επιπλέον μεταβλητή Χ με το όνομα των γραμμών).