假设我有一个.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。如何实现这一目标?
答案 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