2017-08-18 2 views
2

Ich möchte einen Satz basierend auf den Werten in einem Datenrahmen erstellen. Ich habe folgendes data.frame:Erstellen eines Satzes basierend auf den Werten in einem Datenrahmen

canada <- c(50, 50, 50) 
korea <- c(70, 70, 70) 
brazil <- c(100, 100, 100) 
fruit <- rbind(canada, korea, brazil) 
colnames(fruit) <- c("apple", "orange", "banana") 

fruit 
>  apple orange banana 
> canada 50  50  50 
> korea  70  70  70 
> brazil 100 100 100 

Wenn ich tippe Kanada, wollen die Ausgabe wie folgt aussehen:

canada 
Canada consumes average number of apples, average number of oranges, 
and average number of bananas. 

Also habe ich versucht, die folgenden:

average <- 'average number of ' 
if(fruit$'apple' > 90) 
{ 
    cat("Canada", 
      average, fruit$'apple', 
      average, fruit$'orange', 
      "and ", average, fruit$'banana' 
    ) 
} 

Natürlich funktioniert es nicht, und ich stecke hier fest. Kann mich jemand auf den richtigen Weg führen? Ich werde in die Arbeit investieren, um zu lernen!

+1

Für den Anfang können Sie nicht '$' mit einer 'Matrix' wie Ihre' Frucht' verwenden – thelatemail

+0

Danke. Es ist einige Zeit her, dass ich R berührt habe. Ich bin zuversichtlich, dass ich mich an die Grundlagen erinnern kann. Würde es Ihnen etwas ausmachen, mir ein Gerüst zur Verfügung zu stellen? –

+1

Sie können auf Matrixspalten zugreifen wie 'fruit [," apple "]' – thelatemail

Antwort

4

Hier ist mein Versuch, vorausgesetzt, Sie haben möglicherweise andere Spalten als Apfel/Orange/Banane, aber Sie möchten immer alle Werte in einer bestimmten Zeile.

myfun <- function(val){ 
    val <- tolower(val) # assuming all row names are in lower case 
    myrow <- fruit[val,] 

    phrase <- sapply(seq_along(myrow), 
        function(x, n, i) {paste0("consumes average ", x[i], " of ", n[i], "s")}, # "s" added assuming there's always a plural number of fruits 
        x=myrow, n=names(myrow)) 
    phrase[length(phrase)] <- paste0("and ", phrase[length(phrase)], ".") 
    phrase <- paste(phrase, collapse = ", ") 

    cat(tools::toTitleCase(val), phrase) 
} 

> myfun("KOREA") 
Korea consumes average 70 of apples, consumes average 70 of oranges, and consumes average 70 of bananas. 
> myfun("canada") 
Canada consumes average 50 of apples, consumes average 50 of oranges, and consumes average 50 of bananas. 
> myfun("braZIL") 
Brazil consumes average 100 of apples, consumes average 100 of oranges, and consumes average 100 of bananas. 
+0

Vielen Dank !! –

1

So etwas Ähnliches?

canada <- c(50, 50, 50) 
korea <- c(70, 70, 70) 
brazil <- c(100, 100, 100) 
fruit <- rbind(canada, korea, brazil) 
colnames(fruit) <- c("apple", "orange", "banana") 

CA<-fruit[1,1] 
CO<-fruit[1,2] 
CB<-fruit[1,3] 

Canada<-paste("Canada on average eats",CA,"apples",CO,"oranges 
and",CB,"bananas") 

>Canada 
[1] "Canada on average eats 50 apples 50 oranges and 50 bananas" 
+0

Danke! Nicht genau was ich dachte, aber ich schätze die Antwort sehr:) –

Verwandte Themen