簡體   English   中英

在R中導入包含字符串和數字的.csv文件如何轉換?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM