[英]import .csv file in R containing strings and numerics how to convert?
假設我有一個.csv文件,並將其導入R中:
X A B C
1 good luck man
2 string1
3 string2 2.2 3.3 4
4 string3 0.1 10 3
我用了:
read.csv("~/Desktop/test.csv", stringsAsFactors=FALSE)
這是data.frame
類。 現在,我刪除第一行並將第一列設置為行名
test <- test[-1,]
rownames(test) <- test[,1]
test <- test[,-1]
這給
> test
A B C
string1
string2 2.2 3.3 4
string3 0.1 10 3
問題是,所有值都是類字符。 我想將它們更改為數字,並將空的“單元格”(即空字符串“”)轉換為NA,但仍然具有data.frame。 如何做到這一點?
我找不到很好的副本,所以去吧。 使用[]
來保留test
類和sapply
組合,默認情況下, sapply
對數據框架的列(或參數,因為data.frame
本質上是一個以列為參數的列表)進行操作
test[] <- lapply(test, as.numeric)
注意:請確保您所有的列都不屬於class factor
,否則將返回錯誤結果(不觸發警告)
因此,您的問題是您的CSV有兩個標題行,您想使用第一個作為列名嗎?
讀入,並在read.csv
使用skip=2
和(可能) head=FALSE
跳過兩條標題行。
然后,您將獲得一個具有通用列名但類型正確的數據框。
然后,使用readLines
再次讀取文件的第二行,並將其拆分以獲取所讀數據框的列名。
> df = read.csv("twohead.txt",skip=2,head=FALSE)
> colnames(df)=strsplit(readLines("twohead.txt",n=2)[2],",")[[1]]
> df
good luck man
1 string1 NA NA NA
2 string2 1.2 1.1 2.2
3 string3 1.5 3.2 1.2
行名處理與您一樣,盡管我會這樣做:
> rownames(df)=df[,1]
> df[[1]]=NULL
提供df:
> summary(df)
good luck man
Min. :1.200 Min. :1.100 Min. :1.20
1st Qu.:1.275 1st Qu.:1.625 1st Qu.:1.45
Median :1.350 Median :2.150 Median :1.70
Mean :1.350 Mean :2.150 Mean :1.70
3rd Qu.:1.425 3rd Qu.:2.675 3rd Qu.:1.95
Max. :1.500 Max. :3.200 Max. :2.20
NA's :1 NA's :1 NA's :1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.