[R] Problems with read.table and data structure
Marc Schwartz
marc_schwartz at me.com
Fri Jul 11 21:42:14 CEST 2014
On Jul 11, 2014, at 2:36 PM, Marc Schwartz <marc_schwartz at me.com> wrote:
>
> On Jul 11, 2014, at 9:15 AM, Tim Richter-Heitmann <trichter at uni-bremen.de> wrote:
>
>> Hi there!
>>
>> I have huge datafile of 600 columns 360 samples:
>>
>> data <- read.table("small.txt", header = TRUE, sep = "\t", dec = ".",
>> row.names=1)
>>
>> The txt.file (compiled with excel) is showing me only numbers, however R
>> gives me the structure of ANY column as "factor".
>>
>> When i try "stringsAsFactors=FALSE" in the read command, the structure
>> of the dataset becomes "character."
>>
>> When i try as.numeric(data), i get
>>
>> Error: (list) object cannot be coerced to type 'double'
>>
>>
>> even, if i try to subset columns with [].
>>
>>
>> When i try as.numeric on single columns with $, i am successful, but the numbers dont make any sense at all, as the factors are not converted by their levels:
>>
>>
>> Factor w/ 358 levels "0,123111694",..: 11 14 50 12 38 44 13 76 31 30
>>
>>
>> becomes
>>
>>
>> num 11 14 50 12 38 44 13 76 31 30
>>
>>
>> whereas i would need the levels, though!
>>
>>
>> I suspect excel to mess up the "save as tab-delimited text", but the text file seems fine with me on surface (i dont know how the numbers are stored internally). I just see correct numbers, also the View command
>> yields the correct content.
>>
>>
>>
>> Anyone knows help? Its pretty annoying.
>>
>>
>>
>> Thank you!
>
>
> Hi,
>
> See:
>
> http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-do-I-convert-factors-to-numeric_003f
>
> Regards,
>
> Marc Schwartz
Sorry, I just noted that you defined dec = "." in your call to read.table(), whereas it appears that a comma (,) is being used as a decimal separator in your source data.
Modify the dec = "." to dec = "," and that should obviate the need to convert the numeric values to factors during import. They should be converted to numerics right away.
For example:
> str(read.table(textConnection("0,1234"), dec = "."))
'data.frame': 1 obs. of 1 variable:
$ V1: Factor w/ 1 level "0,1234": 1
> str(read.table(textConnection("0,1234"), dec = ","))
'data.frame': 1 obs. of 1 variable:
$ V1: num 0.123
Regards,
Marc
More information about the R-help
mailing list