I am importing CSV data with thousands of rows, if any row contains an error from excel, the whole program crashes, so i need to delete all rows with the value of #VALUE!, all other values are non-numeric... I've tried a bunch of strategies, but nothing seems to work. Thanks ahead of time guys, Best, Cody -- View this message in context: http://r.789695.n4.nabble.com/How-to-delete-an-entire-row-if-a-specific-colum-has-the-value-of-VALUE-tp3469282p3469282.html Sent from the R help mailing list archive at Nabble.com.
How to delete an entire row, if a specific colum has the value of "#VALUE!"
3 messages · empyrean, David Winsemius
On Apr 22, 2011, at 10:35 PM, empyrean wrote:
I am importing CSV data with thousands of rows, if any row contains an error from excel, the whole program crashes, so i need to delete all rows with the value of #VALUE!, all other values are non-numeric... I've tried a bunch of strategies, but nothing seems to work.
A set of error targets:
> lines <- textConnection("a,#NAME?,b
+ #DIV/0!,b,v
+ #VALUE!,bb,nn")
> dat <- read.table(lines, sep="," , header=FALSE, comment="")
> dat
V1 V2 V3
1 a #NAME? b
2 #DIV/0! b v
3 #VALUE! bb nn
# This will turn all the #VALUE!'s into <NA>'s
> is.na(dat) <- dat == "#VALUE!"
> dat
V1 V2 V3
1 a #NAME? b
2 #DIV/0! b v
3 <NA> bb nn
David Winsemius, MD West Hartford, CT
On Apr 23, 2011, at 2:49 AM, David Winsemius wrote:
On Apr 22, 2011, at 10:35 PM, empyrean wrote:
I am importing CSV data with thousands of rows, if any row contains an error from excel, the whole program crashes, so i need to delete all rows with the value of #VALUE!, all other values are non-numeric... I've tried a bunch of strategies, but nothing seems to work.
A set of error targets:
lines <- textConnection("a,#NAME?,b
+ #DIV/0!,b,v + #VALUE!,bb,nn")
dat <- read.table(lines, sep="," , header=FALSE, comment="") dat
V1 V2 V3 1 a #NAME? b 2 #DIV/0! b v 3 #VALUE! bb nn # This will turn all the #VALUE!'s into <NA>'s
is.na(dat) <- dat == "#VALUE!" dat
V1 V2 V3 1 a #NAME? b 2 #DIV/0! b v 3 <NA> bb nn
If you still want to remove rows rather than use R's missing value
facilities, here's a way to eliminate the rows in that result with
"#NAME?", namely to only return the rows that don't have it and then
to rbind the results:
> do.call("rbind", apply(dat,1,function(x) if (!"#NAME?" %in% x)
{x} ) )
V1 V2 V3
[1,] "#DIV/0!" "b" "v"
[2,] NA "bb" "nn"
(You need to learn to read R code from the inside out.)
David Winsemius, MD
West Hartford, CT