R och as.numeric () [stängt]

<åt sidan class = "s-meddelande s-meddelande__info js-post-meddelande mb16" roll = "status ">

Stängd. Denna fråga är utanför ämnet . För närvarande accepteras inte svar.

Kommentarer

  • Vad är frågan exakt? Vill du (-0.921,0.389593) som en numerisk vektor?

Svar

Detta beror på att du har läst siffrorna som faktorer; om du använder read.table, försök med header=T eller omstrukturerar data innan du läser. Något exempel på filen bör vara till hjälp för att lösa den.

Lösning skulle vara att först konvertera faktorer till strängar med as.character och sedan tillbaka till siffror med as.numeric.

Redigera: Koden fungerar för angivet exempel:

readLines("<filename>")->z read.table(textConnection(z[-grep("V",z)])) 

Kommentarer

  • @mbq Eller använd argumentet colClasses i read.table()?
  • @ chl Möjligen; beror på hur dessa data ser ut.
  • " Detta beror på att du har läst siffrorna som faktorer; om du använder read.table, försök header = T eller omstrukturera data innan du läser. Något exempel på filen bör vara till hjälp för att lösa det. " nop. " Lösning skulle vara att först konvertera faktorer till strängar med hjälp av som.karaktär och sedan tillbaka till siffror med as.numeric. " nop. samma resultat.
  • @kwak – ta bort de " V1 V2 … " innan du gör något. as.numeric vann ' t arbete med okonverterbara element i vektor.
  • @mbq: > som gjorde tricket . Jag förväntade mig något annat.

Svar

Skulle det hjälpa?

> a <- as.data.frame(matrix(scan("1.txt", what="character", na.strings=c("NA",paste("V",1:6,sep=""))), nc=13, byrow=T)) > class(a[,1]) [1] "factor" > for (i in 1:ncol(a)) a[,i] <- as.numeric(as.character(a[,i])) > class(a[,1]) [1] "numeric" > summary(a) # should work here 

Hur du importerar data spelar ingen roll så mycket. Jag tror att den kritiska delen om att konvertera värde som tecken sedan som numeriskt (detta gör det möjligt att konvertera nivåer av en faktor till deras numeriska motsvarigheter) .

Kommentarer

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *