2017-12-07 1 views
0

So habe ich einen Datensatz in R (Framingham Heart Study Daten), und ich versuche, BMI-Gruppen "Untergewicht zuweisen, "normal", "übergewichtig" und "fettleibig."Versuchen, Gruppen in R zuzuweisen, aber es füllt NA-Werte und fehlt andere, die in die Gruppe gehören

Es hat über 11.000 Beobachtungen und 38 Variablen/Spalten, so dass es schwierig wäre, einige der Daten hier zu veröffentlichen (ich hoffe, es wird nicht zu viel Mühe sein, ohne sie zu antworten).

Der Datensatz wird genannt frm und ich versuche, in der folgenden Art und Weise der Teilmenge:

frm$BMIGRP <- NA #Creating new variable (this part works and creates a BMIGRP column with all NA values) 
frm$BMIGRP[which(as.numeric(frm$BMI) < 18.5)] <- "underweight" 

Allerdings gibt es NA-Werte im Datensatz BMI Variable (angegeben mit einer, die ich habe „“ versuchte auch, zu NA zu wechseln).

Wenn ich versuche, diese Art für jede Gruppe zu unterteilen, werden nur einige der untergewichtigen Werte "untergewichtig" zugewiesen und es wird eine Menge NA/"zugewiesen". Werte zu untergewichten. Es sagt mir dann, dass es nur 10 "normale" Gewicht-Themen gibt und ungefähr 11000 in der fettleibigen Kategorie, die einfach nicht wahr ist, weil ich den Datensatz ansehen kann.

Wenn dies korrekt durchgeführt wird, sollten die vier Gruppen mit mehreren hundert bis mehreren tausend Beobachtungen in jeder Kategorie erstellt werden. Aber ich bekomme nur 10 normal, 71 untergewichtig und ~ 11.000 fettleibig.

Ich bin mir einfach nicht sicher, wo ich falsch liege oder ob es eine andere Möglichkeit gibt, wie ich eine neue Variable erstellen und sie auf die gleiche Art und Weise zuweisen kann. Jede Hilfe wird sehr geschätzt.

Ich sollte auch erwähnen, dass dies der Code ist, den mein Professor uns als Beispiel in unserer Laborsitzung gegeben hat, und ich kopiere ihn im Grunde mit dem passenden Ersatz für meinen Datensatz.

Dies ist meine erste Frage auf dieser Website, also entschuldige ich mich, wenn es unvollständig ist oder wenn ich mehr Informationen geben muss. Vielen Dank!

+0

Überprüfen Sie die Klasse der BMI-Spalte, Klasse (frm $ BMI). Es sollte numerisch sein. – leeum

+0

Ja, es war nicht numerisch, es war Char aus irgendeinem Grund. Vielen Dank! –

Antwort

0

Wenn Sie Ihren Code lesen, scheint die Spalte nicht numerisch zu sein. sagte

frm$BMI <- as.numeric(frm$BMI) 
frm$BMIGRP[frm$BMI < 18.5] <- "underweight" 
+0

Ich habe versucht, den Datensatz mit dem Importdatensatz-Button erneut zu importieren, und ich sah, dass die Spalte nicht numerisch war (es war irgendwie char?), Und ich änderte sie in numerisch. Danach habe ich deinen Code benutzt und es hat funktioniert! Ich denke, du meintest damit, dass du von $ BMIGRP [frm $ BMI <18,5] sprichst, also habe ich das stattdessen versucht. Vielen Dank! –

+0

Korrekt das ist, was ich meinte. Froh, dass es für dich repariert wurde. Mein Code wurde aktualisiert – leeum

0

Wie @leeum:

arbeiten Dies sollte. Überprüfen Sie, ob numerisch ist. Wenn Sie eine neue Kategoriespalte basierend auf BMI erstellen möchten, sehen Sie sich case_when von dplyr an. Vielleicht ist es das, was man wollte:

library(dplyr) 

frm <- frm %>% 
    mutate(BMI = as.numeric(BMI)) %>% 
    mutate(BMIGRP = case_when(
    BMI < 18.5 ~ 'underweight', 
    between(BMI, 18.5, 24.9) ~ 'healthy weight', 
    between(BMI, 25, 29.9) ~ 'overweight', 
    BMI > 30 ~ 'obese') 
) 

Die mutate(BMIGRP = as.numeric(BMIGRP)) wandelt die BMIGRP Spalte numerisch. Dann wird mutate(BMIGRP = case_when(...) eine neue Spalte namens BMIGRP erstellen und "Untergewicht", "gesundes Gewicht", "Übergewicht" oder "fettleibig" basierend auf der BMI zuweisen. Wenn das Argument nicht zutrifft, wird NA zugewiesen.

Verwandte Themen