Espressioni¶
Diverse funzioni in pTabs (filter, select, rake, value_if, compute, ecc.)
richiedono o consentono l’utilizzo di espressioni sulle variabili del data frame.
E’ possibile specificare le espressioni in tre modi diversi:
il semplice nome della variabile o nome preceduto da ! per indicare i casi validi o non validi sulla variabile
un hash (dizionario) con le coppie variabile-valori. Più coppie variabile-valori sono unite in AND nell’espressione
una stringa con un’espressione composta da:
- Operatori aritmetici: +, -, *, /, %
- Operatori di confronto: <, >, <=, >=, <>, !=, =
- Operatori logici: AND, OR, NOT
- Selezione: CASE, IF
- Tutte le funzioni del modulo Math di Ruby, come SIN, COS, TAN, ecc.
- Le seguenti funzioni:
Funzione
Argomenti
Valore restituito
Descrizione
MAX
array
number
valore massimo
MIN
array
number
valore minimo
ROUND
number, ndec
number
arrotonda
ROUNDDOWN
number, ndec
number
arrotonda al numero inferiore
ROUNDUP
number, ndec
number
arrotonda al numero superiore
SUM
array
number
somma valori
MEAN
array
number
media valori
DIFF
val1, val2
number
differenza due valori
TRUNC
number
number
tronca i decimali
FLOAT
number
number
converte il numero in float
INT
number
number
converte il numero in intero
BETWEEN
value, min, max
boolean
testa se il valore è tra minimo e massimo
TEXT
value
string
converte il numero in stringa
FIRST
array
il primo elemento valido dell’array
LAST
array
l’ultimo elemento valido dell’array
ANY
value, array
boolean
testa se almeno un elemento della lista è uguale al valore
IFANY
value, yes, no, array
testa se almeno un elemento della lista è uguale al valore e restituisce yes o no
ALL
value, array
boolean
testa se tutti gli elementi della lista sono uguali al valore
IFALL
value, yes, no, array
testa se tutti gli elementi della lista sono uguali al valore e restituisce yes o no
NONE
value, array
boolean
testa se nesuno degli elementi della lista sono uguali al valore
IFNONE
value, yes, no, array
testa se nesuno degli elementi della lista sono uguali al valore e restituisce yes o no
VALID
array
boolean
testa se almeno un elemento è un valore valido
NVALID
array
number
restituisce il numero di elementi validi
COUNT
value, array
number
conta gli elementi uguali a valore
MCOUNT
‘[val1,val2,...]’, array
number
conta gli elementi uguali a uno dei valori
NUMBER
string
number
converte la stringa in numero
CONCAT
array
string
concatena le stringhe
DATE
string
data
converte la stringa in data
DATETIME
string
datetime
converte la stringa in datetime
STRIP
string
string
elimina gli spazi iniziali e finali dalla stringa
EMPTY
string
boolean
testa se la stringa è vuota
FILLED
string
boolean
testa se la stringa è piena
CAPITALIZE
string
string
converte il primo carattere della stringa in maiuscolo
TITLEIZE
string
string
converte il primo carattere di ogni parola in maiuscolo
UPCASE
string
string
converte la stringa in maiuscolo
DOWNCASE
string
string
converte la stringa in minuscolo
SCOUNT
string, text
number
conta le occorrenze di text in string
SPLIT
string, sep, ntoken
string
divide la stringa in base a sep
LEFT
string, number
string
restituisce i primi number caratteri
RIGHT
string, number
string
restituisce gli ultimi number caratteri
MID
string, start, len
string
restituisce la sottostringa lunga len che parte dalla posizione start
LEN
string
number
string
SUBSTITUTE
string, search, repl
string
sostituisce search con repl
N
number
il numero totale di record
NROW
number
il numero progressivo del record (base 1)
LABEL
varname
string
l’etichetta della variabile
LEVEL
varname, code
string
l’etichetta del livello della variabile
Esempi con sintassi alternative:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | # valori validi
:x1
"x1"
"VALID(x1)"
# valori mancanti
:x1 => nil
"!x1"
"NOT(VALID(x1))"
# uguale a un valore
{:sesso => 1}
"sesso=1"
# minore di un valore
"etanum<=25"
# due condizioni diverse in AND
"#sesso=1 AND etanum<25"
# più valori di una stessa variabile(in OR)
:region => [1,3,7]
"ANY(region,1,3,7)"
# range
:etanum => 18..24
# estrae il mese da una stringa e lo strasforma in intero
compute :mese => "INT(MID(giorno,6,2))"
|
Le funzioni possono essere scritte indifferentemente in maiuscolo o minuscolo.
add_function¶
add_function permette di definire delle nuove funzioni all’interno dello script:
1 2 3 4 5 6 7 | add_function(name, type, body)
add_function(:myfunction, :string, ->(text) {
text.gsub(/(.+?) anni/, 'Age \1')
})
compute :x4 => "MYFUNCTION(level(eta))"
|