读取csv文件,在一列中包含数字和字符串

evt*_*evt 6 csv r

我正在导入3列CSV文件.最后一列是一系列条目,可以是整数,也可以是引号中的字符串.

以下是一系列示例条目:

1,4,"m"
1,5,20
1,6,"Canada"
1,7,4
1,8,5
Run Code Online (Sandbox Code Playgroud)

当我使用read.csv导入它时,这些都只是转入因子.

如何设置它们以便将它们作为整数和字符串读取?

谢谢!

And*_*rie 9

这是不可能的,因为给定的载体可以仅具有单一模式(例如character,numericlogical).

但是,您可以将矢量拆分为两个单独的矢量,一个具有数值,第二个具有字符值:

vec <- c("m", 20, "Canada", 4, 5)

vnum <- as.numeric(vec)
vchar <- ifelse(is.na(vnum), vec, NA)

vnum
[1] NA 20 NA  4  5

vchar
[1] "m"      NA       "Canada" NA       NA      
Run Code Online (Sandbox Code Playgroud)


jor*_*ran 6

编辑 尽管OP决定接受这个答案,@ Andrie的答案是首选的解决方案.我的回答只是为了告知数据帧的一些奇怪特征.

正如其他人所指出的那样,简短的回答是这是不可能的.data.frames旨在包含单个原子类型的列.@Andrie的建议是一个很好的建议,但只是为了踢,我想我会指出一种方法将这类数据塞进一个data.frame.

您可以将违规列转换为列表(此代码假定您已设置options(stringsAsFactors = FALSE)):

dat <- read.table(textConnection("1,4,'m'
1,5,20
1,6,'Canada'
1,7,4
1,8,5"),header = FALSE,sep = ",")

tmp <- as.list(as.numeric(dat$V3))
tmp[c(1,3)] <- dat$V3[c(1,3)]
dat$V3 <- tmp

str(dat)
'data.frame':   5 obs. of  3 variables:
 $ V1: int  1 1 1 1 1
 $ V2: int  4 5 6 7 8
 $ V3:List of 5
  ..$ : chr "m"
  ..$ : num 20
  ..$ : chr "Canada"
  ..$ : num 4
  ..$ : num 5
Run Code Online (Sandbox Code Playgroud)

现在,有很多理由说明这是一个坏主意.首先,你希望与data.frames 很好地配合使用的许多代码都不会喜欢这个并且要么失败,要么表现得非常奇怪.但我想我会把它作为一种好奇心来指出.