De paarsgewijze (parallelle) minima vinden

Eerst maakte ik een dataframe zoals hieronder:

age=18:29
height=c(76.1,77,78.1,78.2,78.8,79.7,79.9,81.1,81.2,81.8,82.8,83.5)
height1=c(71.1,75,77.1,73.2,77.8,73.7,78.9,87.1,86.2,85.8,82.8,83.5)
village=data.frame(age=age,height=height,height1=height1)

Nu wil ik een vierde kolom in het gegevensframe maken die de lengte van de kortere persoon per rij neemt, bijvoorbeeld rij 1 76.1 vs 71.1 zou 71.1 moeten terugkeren, enzovoort.

Ik probeerde dit met deze code:

village=transform(village, shorter=min(height,height1))

En ik kreeg een vreemd resultaat. Het geeft me de absoluut kleinste waarde in beide kolommen:

It gives me the absolute smallest height in BOTH columns

Hoe kan ik deze functie aanpassen om me de laagste waarde op een rij per rij te geven?

1

1 antwoord

De functie min kijkt naar de hele vector. Wat je wilde was pmin :

> village$ageminht <- with(village, pmin(height, height1) )
> village$ageminht
 [1] 71.1 75.0 77.1 73.2 77.8 73.7 78.9 81.1 81.2 81.8 82.8 83.5
12
toegevoegd
Dank je. Wat is het verschil tussen de functie 'met' en de functie 'transformeren', d.w.z. wanneer zou u de ene versus de andere gebruiken?
toegevoegd de auteur AME, de bron
De functie binnen lijkt meer op transform dan met . met biedt een omgeving waaruit resultaten kunnen worden geretourneerd, maar tenzij deze is gekoppeld aan <- (toewijzing), heeft deze geen permanent effect.
toegevoegd de auteur 42-, de bron
Ik heb nog niet veel waarde gezien voor binnen via met . binnen maakt geen echte verandering in een object, het geeft alleen een waarde terug die even groot is als het hele dataframe, dus je moet nog steeds een opdracht maken met <-
toegevoegd de auteur 42-, de bron