在R中导入包含字符串和数字的.csv文件如何转换?

时间:2014-08-24 13:12:58

标签: r

假设我有一个.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。现在我删除第一行并将第一列设置为rownames

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

问题是,所有值都是类字符。我想将它们更改为数字并转换空的&#34;单元格&#34; (即空字符串&#34;&#34;)到NA但仍然有data.frame。如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

我找不到好的副本,所以就这样了。使用[]以保留与test结合使用的sapply类,默认情况下,该data.frame操作数据框的列(或test[] <- lapply(test, as.numeric) 基本上是factor列以列为参数)

{{1}}

注意:确保您的列不属于{{1}}类,否则会返回错误的结果(不会触发警告)

答案 1 :(得分:1)

所以你的问题是你的CSV有两个标题行,你想把第一个用作列名吗?

继续阅读,在skip=2中使用head=FALSE和(可能)read.csv跳过两个标题行。

然后你有一个包含通用列名但数据类型正确的数据框。

然后使用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

Rowname处理与你一样,虽然我会这样做:

> 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