Ricerca…


Sequenza di numeri

Usa l'operatore : per creare sequenze di numeri, ad esempio per utilizzare vettori di pezzi più grandi del tuo codice:

x <- 1:5
x
## [1] 1 2 3 4 5

Funziona in entrambi i modi

10:4
# [1] 10  9  8  7  6  5  4

e anche con numeri in virgola mobile

1.25:5
# [1] 1.25 2.25 3.25 4.25

o negativi

-4:4
#[1] -4 -3 -2 -1  0  1  2  3  4

seq ()

seq è una funzione più flessibile rispetto all'operatore : che consente di specificare passi diversi da 1.

La funzione crea una sequenza start (il valore predefinito è 1) fino alla fine, incluso quel numero.

È possibile fornire solo il parametro end ( to )

seq(5)
# [1] 1 2 3 4 5

Così come l'inizio

seq(2, 5) # or seq(from=2, to=5)
# [1] 2 3 4 5

E infine il passo ( by )

seq(2, 5, 0.5) # or seq(from=2, to=5, by=0.5)
# [1] 2.0 2.5 3.0 3.5 4.0 4.5 5.0

seq può facoltativamente dedurre i passaggi (uniformemente distanziati) quando viene fornita alternativamente la lunghezza desiderata dell'output ( length.out )

seq(2,5, length.out = 10)
# [1] 2.0 2.3 2.6 2.9 3.2 3.5 3.8 4.1 4.4 4.7 5.0

Se la sequenza deve avere la stessa lunghezza di un altro vettore, possiamo usare il along.with come una scorciatoia per length.out = length(x)

x = 1:8
seq(2,5,along.with = x)
# [1] 2.000000 2.428571 2.857143 3.285714 3.714286 4.142857 4.571429 5.000000

Esistono due funzioni semplificate utili nella famiglia seq : seq_along , seq_len e seq.int . seq_along funzioni seq_along e seq_len costruiscono i numeri naturali (contando) da 1 a N, dove N è determinato dall'argomento della funzione, dalla lunghezza di un vettore o di una lista con seq_along e dall'argomento intero con seq_len .

seq_along(x)
# [1] 1 2 3 4 5 6 7 8

Nota che seq_along restituisce gli indici di un oggetto esistente.

# counting numbers 1 through 10
seq_len(10)
[1]  1  2  3  4  5  6  7  8  9 10
# indices of existing vector (or list) with seq_along
letters[1:10]
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
seq_along(letters[1:10])
[1]  1  2  3  4  5  6  7  8  9 10

seq.int è lo stesso di seq mantenuto per la compatibilità antica.

C'è anche una vecchia sequence funzioni che crea un vettore di sequenze da un argomento non negativo.

sequence(4)
# [1] 1 2 3 4
sequence(c(3, 2))
# [1] 1 2 3 1 2
sequence(c(3, 2, 5))
# [1] 1 2 3 1 2 1 2 3 4 5

Vettori

I vettori in R possono avere diversi tipi (es. Intero, logico, carattere). Il modo più generale per definire un vettore è usare la funzione vector() .

vector('integer',2) # creates a vector of integers of size 2.
vector('character',2) # creates a vector of characters of size 2.
vector('logical',2) # creates a vector of logicals of size 2.

Tuttavia, in R, le funzioni stenografiche sono generalmente più popolari.

integer(2) # is the same as vector('integer',2) and creates an integer vector with two elements
character(2) # is the same as vector('integer',2) and creates an character vector with two elements
logical(2) # is the same as vector('logical',2) and creates an logical vector with two elements

È anche possibile creare vettori con valori diversi dai valori predefiniti. Spesso la funzione c() viene utilizzata per questo. Il c è l'abbreviazione di combinare o concatenare.

c(1, 2) # creates a integer vector of two elements: 1 and 2.
c('a', 'b') # creates a character vector of two elements: a and b.
c(T,F) # creates a logical vector of two elements: TRUE and FALSE.

È importante notare che R interpreta qualsiasi numero intero (ad esempio 1) come un vettore intero di dimensione uno. Lo stesso vale per i numeri (ad es. 1.1), logici (es. T o F) o caratteri (es. 'A'). Pertanto, in sostanza si stanno combinando i vettori, che a loro volta sono vettori.

Fai attenzione che devi sempre combinare vettori simili. Altrimenti, R proverà a convertire i vettori in vettori dello stesso tipo.

c(1,1.1,'a',T) # all types (integer, numeric, character and logical) are converted to the 'lowest' type which is character.

La ricerca di elementi nei vettori può essere eseguita con [ operator.

vec_int <- c(1,2,3)
vec_char <- c('a','b','c')
vec_int[2] # accessing the second element will return 2
vec_char[2] # accessing the second element will return 'b'

Questo può anche essere usato per cambiare i valori

vec_int[2] <- 5 # change the second value from 2 to 5
vec_int # returns [1] 1 5 3

Infine, l'operatore : (abbreviazione della funzione seq() ) può essere utilizzato per creare rapidamente un vettore di numeri.

vec_int <- 1:10
vec_int # returns [1] 1 2 3 4 5 6 7 8 9 10

Questo può anche essere usato per subsetare i vettori (da sottoinsiemi semplici a più complessi)

vec_char <- c('a','b','c','d','e')
vec_char[2:4] # returns [1] "b" "c" "d"
vec_char[c(1,3,5)] # returns [1] "a" "c" "e"

Creazione di vettori denominati

Il vettore con nome può essere creato in diversi modi. Con c :

xc <- c('a' = 5, 'b' = 6, 'c' = 7, 'd' = 8)

che risulta in:

> xc
a b c d 
5 6 7 8

con list :

xl <- list('a' = 5, 'b' = 6, 'c' = 7, 'd' = 8)

che risulta in:

> xl
$a
[1] 5

$b
[1] 6

$c
[1] 7

$d
[1] 8

Con la funzione setNames , è possibile utilizzare due vettori della stessa lunghezza per creare un vettore con nome:

x <- 5:8
y <- letters[1:4]

xy <- setNames(x, y)

che risulta in un vettore intero con nome:

> xy
a b c d 
5 6 7 8

Come si può vedere, questo dà lo stesso risultato del metodo c .

Puoi anche utilizzare la funzione dei names per ottenere lo stesso risultato:

xy <- 5:8
names(xy) <- letters[1:4]

Con un tale vettore è anche possibile selezionare elementi per nome:

> xy["c"]
c 
7 

Questa caratteristica rende possibile usare un tale vettore con nome come vettore / tabella di ricerca per abbinare i valori ai valori di un altro vettore o colonna in un dataframe. Considerando il seguente dataframe:

mydf <- data.frame(let = c('c','a','b','d'))

> mydf
  let
1   c
2   a
3   b
4   d

Supponiamo di voler creare una nuova variabile nel mydf mydf denominata num con i valori corretti di xy nelle righe. Uso della match funzione i valori appropriati xy possibile selezionare:

mydf$num <- xy[match(mydf$let, names(xy))]

che risulta in:

> mydf
  let num
1   c   7
2   a   5
3   b   6
4   d   8

Espansione di un vettore con la funzione rep ()

La funzione rep può essere utilizzata per ripetere un vettore in modo abbastanza flessibile.

# repeat counting numbers, 1 through 5 twice
rep(1:5, 2)
[1] 1 2 3 4 5 1 2 3 4 5

# repeat vector with incomplete recycling
rep(1:5, 2, length.out=7)
[1] 1 2 3 4 5 1 2

Ciascun argomento è particolarmente utile per espandere un vettore di statistiche di unità osservative / sperimentali in un vettore di data.frame con osservazioni ripetute di queste unità.

# same except repeat each integer next to each other
rep(1:5, each=2)
[1] 1 1 2 2 3 3 4 4 5 5

Una buona caratteristica del rep riguardo all'espansione di una tale struttura di dati è che l'espansione di un vettore in un pannello sbilanciato può essere eseguita sostituendo l'argomento della lunghezza con un vettore che stabilisce il numero di volte per ripetere ogni elemento nel vettore:

# automated length repetition
rep(1:5, 1:5)
 [1] 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
# hand-fed repetition length vector
rep(1:5, c(1,1,1,2,2))
[1] 1 2 3 4 4 5 5

Ciò dovrebbe esporre la possibilità di consentire ad una funzione esterna di alimentare il secondo argomento di rep per costruire dinamicamente un vettore che si espande in base ai dati.


Come con seq , versioni più rapide e semplificate di rep sono rep_len e rep.int . Questi rilasciano alcuni attributi che il rep mantiene e quindi possono essere più utili in situazioni in cui la velocità è una preoccupazione e non sono necessari ulteriori aspetti del vettore ripetuto.

# repeat counting numbers, 1 through 5 twice
rep.int(1:5, 2)
[1] 1 2 3 4 5 1 2 3 4 5

# repeat vector with incomplete recycling
rep_len(1:5, length.out=7)
[1] 1 2 3 4 5 1 2

Vettori da costruire in costanti: Sequenze di lettere e nomi dei mesi

R ha un numero di costanti costruite. Sono disponibili le seguenti costanti:

  • LETTERS : le 26 lettere maiuscole dell'alfabeto romano
  • letters : le 26 lettere minuscole dell'alfabeto romano
  • month.abb : le abbreviazioni di tre lettere per i nomi dei mesi inglesi
  • month.name : i nomi inglesi per i mesi dell'anno
  • pi : il rapporto tra la circonferenza di un cerchio e il suo diametro

Dalle lettere e dalle costanti del mese, i vettori possono essere creati.

1) Sequenze di lettere:

> letters
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"

> LETTERS[7:9]
[1] "G" "H" "I"

> letters[c(1,5,3,2,4)]
[1] "a" "e" "c" "b" "d"

2) Sequenze di abbreviazioni del mese o nomi di mesi:

> month.abb
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"

> month.name[1:4]
[1] "January"  "February" "March"    "April"   

> month.abb[c(3,6,9,12)]
[1] "Mar" "Jun" "Sep" "Dec"


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow