avsnitt Progress
0% färdig

Teckenvektor (character vector)

Text och symboler lagras i en så kallad character vector. Följande kommando skapar en sådan genom att omsluta en sträng med citationstecken:

my_string <- c("Detta är en sträng")

my_string
## [1] "Detta är en sträng"

Teckenvektorn my_string lagrar en sträng, nämligen ”Detta är en sträng”. Därför är en sträng ett element i en teckenvektor. En sträng kan innehålla symboler, bokstäver och siffror. Här följer en teckenvektor med 2 strängar, varav den andra innehåller siffror och symboler:

my_string <- c("Detta är en sträng", "Detta är sträng nummer #2")

my_string
## [1] "Detta är en sträng" "Detta är sträng nummer #2"

Observera att om du omsluter siffror med citationstecken, så kommer de att behandlas som tecken (och inte som siffror!) :

my_numbers <- c(1, 2, 3)
my_numbers
## [1] 1 2 3
your_numbers <- c("1", "2", "3")
typeof(your_numbers)
## [1] "character"
your_numbers
## [1] "1" "2" "3"

Note that the numbers in the object your_numbers were surrounded with quotes. That is why R converted the object to a character vector. When printing that object, R shows the quotes to make clear that those are character strings! All character strings are printed using quotes in R.

Observera att siffrorna i objektet your_numbers omsluts med citattecken. Detta beror på att R omvandlade objektet till en teckenvektor. När du skriver ut objektet så visar R citattecken för att tydliggöra att det är teckensträngar! Alla teckensträngar skrivs ut med citattecken i R.

En teckensträng innehåller tecken och symboler. Det går inte att utföra matematiska operationer på teckensträngar, även om de innehåller siffror. Låt oss se två exempel:

Exempel 1: Skapa en sträng med bokstäver

my_string <- "Min nya sträng"

# Multiplicera med 2
my_string*2

## Error in my_string * 2 : non-numeric argument to binary operator

Exempel 2: Skapa en sträng med en siffra

my_string <- "100"

# Multiplicera med 2
my_string*2

## Error in my_string * 2 : non-numeric argument to binary operator

I båda exemplen svarar R att åtgärden inte kan slutföras eftersom argumentet (my_string) inte är numeriskt (non-numeric).

Teckenvektorer kan alltså innehålla tal men de behandlas inte som numeriska värden. Kom ihåg att R kommer att presentera siffror som är strängar genom att omsluta dem med citattecken. Faktum är att allt som omges av citattecken behandlas som strängar. Liksom R använder citattecken för att presentera dessa element så måste du använda citattecken när du refererar till dem. Låt oss se ett exempel, där vi först skapar två vektorer, som vi sedan bakar ihop till en dataframe. Innehållet består av blodtrycksvärden på män och kvinnor.

# Skapa en vektor för kön och kalla den "sex"
sex <- c("Man", "Woman", "Man", "Woman")

# Skapa en vektor för blodtryck och kalla den "pressure"
pressure <- c(140, 130, 120, 150)

# Kombinera vektorerna till en tabell med hjälp av funktionen data.frame()
my_data_frame <- data.frame(sex, pressure)

# Inspektera vår nya dataframe
my_data_frame
    sex pressure
1   Man      140
2 Woman      130
3   Man      120
4 Woman      150
# Skapa en ny dataframe som endast innehåller män
# Den nya dataframen skall heta "only_men"
# Vi skapar den genom att filtrera den ursprungliga dataframen med hjälp av funktionen subset()
only_men <- subset(my_data_frame, sex=="Man")

Inspektera vår nya dataframe
only_men
  sex pressure
1 Man      140
3 Man      120

Kommandot som selekterar alla män är: subset(my_data_frame, sex=="Man"). Man måste placeras inom citattecken, annars blir det error, vilket demonstreras här:

only_men <- subset(my_data_frame, sex==Man)
## Error in eval(e, x, parent.frame()) : object 'Man' not found

Felmeddelandet är onekligen lite kryptiskt, vilket ofta är fallet när man arbetar i R. Lyckligtvis lär man sig känna igen olika felmeddelanden och deras innebörd (Google finns alltid till hjälp). I detta fall fick vi error eftersom vi utelämnade citattecken och då började R leta efter ett objekt med namnet Man, vilket inte kunde hittas och ett felmeddelande returneras.

0/5 (0 Reviews)