我有一个csv文件,其数据如下 -
现在第3列Transaction有String元素。现在我想将Dr.更改为(0)和Cr。 (1)使用read.csv在R中导入此csv时。 这是可能的R或我可以包括的任何技巧,以便在读取csv时在列中进行更改,或者我需要编写将读取此特定列的函数,然后它将值更改为Dr.(0)和Cr。 (1)
答案 0 :(得分:4)
正如@Stephan在他的答案中所表明的,as.numeric(logical)
适用于这种情况(就像ifelse
一样),但是如果你发现自己处于{Transaction
的值超过2的情况下1}},您可以创建一个命名向量来用作映射
x <- c("Dr.", "Cr.", "Er.", "Cr.")
c(Dr.=0, Cr.=1, Er.=2)[x]
#Dr. Cr. Er. Cr.
# 0 1 2 1
让它看起来更像你的例子......
dat <- read.csv("/path/to/file", header=TRUE)
transform(dat, Transaction=c(Dr.=0, Cr.=1)[as.character(Transaction)])
如果您自己创建课程,也可以使用colClasses=
参数执行此操作。
## Sample data
Lines <- "V1,V2
0,Cr.
1,Dr.
2,Cr.
3,Dr.
"
# create a class
setClass("CrDr")
setAs("character", "CrDr", function(from) c(Cr.=1,Dr.=0)[from])
read.csv(text=Lines, colClasses=c("numeric","CrDr"))
# V1 V2
#1 0 1
#2 1 0
#3 2 1
#4 3 0
答案 1 :(得分:2)
您在阅读数据时无法做到这一点,但一旦您阅读了数据,替换就很简单了:
> Transaction <- factor(sample(c("Dr.","Cr."),10,replace=TRUE))
> Transaction
[1] Dr. Cr. Cr. Dr. Dr. Cr. Dr. Dr. Dr. Dr.
Levels: Cr. Dr.
> Transaction <- as.numeric(Transaction=="Cr.")
> Transaction
[1] 0 1 1 0 0 1 0 0 0 0