Găsirea minime pereche (paralel)

În primul rând, am creat un cadru de date ca mai jos:

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)

Acum, vreau să creez o a patra coloană în cadrul de date care să ia înălțimea persoanei mai scurte pe fiecare rând, de ex. rândul 1 76.1 vs 71.1 ar trebui să returneze 71.1 și așa mai departe.

Am încercat să fac asta cu acest cod:

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

Și am un rezultat ciudat. Îmi dă valoarea absolută cea mai mică în coloanele BOTH:

It gives me the absolute smallest height in BOTH columns

Cum pot modifica această funcție pentru a-mi da valoarea inferioară pe rând?

1

1 răspunsuri

Funcția min se uită la întreg vectorul. Ceea ce ați dorit a fost 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
adăugat
Mulțumesc. Care este diferența dintre funcția "cu" și funcția "transformare", adică când ați utiliza unul față de celălalt?
adăugat autor AME, sursa
Funcția within este mai mult ca transform decât cu . cu oferă un mediu din care pot fi returnate rezultatele, dar dacă nu este cuplat cu <- (atribuire), nu va avea efect permanent.
adăugat autor 42-, sursa
Încă nu am văzut multă valoare pentru în peste cu . în nu face o schimbare reală într-un obiect, returnează doar o valoare care este la fel de mare ca întregul cadru de date, deci tot trebuie să faceți o alocare cu <-
adăugat autor 42-, sursa