Het omzetten van een teken op een numerieke gegevens frame

Ik heb een karakter frame gegevens in R die heeft NaNs in. Ik moet verwijderen een rij met een NaN en vervolgens om te zetten in een numerieke gegevens frame.

Als ik gewoon doe.numeriek op het frame gegevens, ik loop naar de volgende

Error: (list) object cannot be coerced to type 'double'
 1:
 0:
  • neem een kijkje op complete.cases en zie ook link

 

2 Replies
  1. 16

    Als @thijs van den bergh punten u,

    dat <- data.frame(x=c("NaN","2"),y=c("NaN","3"),stringsAsFactors=FALSE)
    
    dat <- as.data.frame(sapply(dat, as.numeric)) #<- sapply is here
    
    dat[complete.cases(dat), ]
    #  x y
    #2 2 3

    Is een manier om dit te doen.

    Uw fout komt van proberen te maken een data.frame numeriek. De sapply optie laat ik zien is in plaats van het maken van elke kolom vector numeriek.

    • Fout in lapply(X = X, FUN = FUN, …) : (omgezet van waarschuwing) NAs geïntroduceerd door dwang 1: zo.de gegevens.frame(sapply(tijd, als.numeriek)) 2: sapply(tijd, als.numeriek) 3: lapply(X = X, FUN = FUN, …) 4: .signalSimpleWarning(“NAs geïntroduceerd door dwang”, quote(lapply(X = X, FUN = FUN, …))) 5: withRestarts({ 6: withOneRestart(expr, opnieuw is opgestart[[1]]) 7: doWithOneRestart(return(expr), opnieuw opstarten)
    • Weet u niet zeker hoe bedoel je, die sapply opties?
    • Zowel de oplossingen niet werken, ik krijg dezelfde foutmelding, misschien ben ik iets te missen?
    • zoals ik al zei in mijn reactie, als u enkele voorbeelden van gegevens die we kunnen krijgen aan de onderkant van deze. 🙂 Probeer plaatsen van de output van dput(yourdata)
    • Ik zal proberen en zin van de antwoorden van jongens, ik denk dat ik ben geklungel smwhr, maar shud in staat mezelf te helpen 🙂
  2. 7

    Er rekening mee dat data.frames niet numeric of character, maar eerder een list worden numeric kolommen, alle character kolommen, of een combinatie van deze of andere typen (bijvoorbeeld: Date/logical).

    dat <- data.frame(x=c("NaN","2"),y=c("NaN","3"),stringsAsFactors=FALSE)
    is.list(dat)
    # [1] TRUE

    De voorbeeld data heeft karakter twee kolommen:

    > str(dat)
    'data.frame':   2 obs. of  2 variables:
     $ x: chr  "NaN" "2"
     $ y: chr  "NaN" "3

    …die je zou kunnen toevoegen een numerieke kolom als volgt:

    > dat$num.example <- c(6.2,3.8)
    > dat
        x   y num.example
    1 NaN NaN         6.2
    2   2   3         3.8
    > str(dat)
    'data.frame':   2 obs. of  3 variables:
     $ x          : chr  "NaN" "2"
     $ y          : chr  "NaN" "3"
     $ num.example: num  6.2 3.8

    Dus, wanneer u probeert te doen as.numeric R raakt in de war, want het is benieuwd hoe zetten deze lijst object kan meerdere soorten in. user1317221_G’s antwoord maakt gebruik van de ?sapply functie, die kan worden gebruikt bij het toepassen van een functie op de afzonderlijke items van een object. U kan ook gebruik ?lapply dat is een zeer vergelijkbare functie (lees meer op de *apply functies hier – R Groepering van functies: sapply vs. lapply vs. toepassing. vs. tapply vs. door vs. totale )

    I. e. – in dit geval, voor elke kolom van uw data.frame, kunt u de as.numeric functie, zoals:

    data.frame(lapply(dat,as.numeric))

    De lapply gesprek is verpakt in een data.frame te zorgen dat de output is een data.frame en niet een list. Dat is, draait:

    lapply(dat,as.numeric)

    krijgt u:

    > lapply(dat,as.numeric)
    $x
    [1] NaN   2
    
    $y
    [1] NaN   3
    
    $num.example
    [1] 6.2 3.8

    Terwijl:

    data.frame(lapply(dat,as.numeric))

    krijgt u:

    >  data.frame(lapply(dat,as.numeric))
        x   y num.example
    1 NaN NaN         6.2
    2   2   3         3.8
    • geweldig antwoord. Maar R behoeften om dit op te lossen. De dingen als dit, dat zet mensen weg uit onze gemeenschap.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *