[英]change in the column value while reading csv in R
我有一個csv文件,其數據如下:
現在,第三列Transaction具有String元素。 現在,我想將值Dr.更改為(0)和Cr。 (1),同時使用read.csv在R中導入此csv。 這在R中是可行的還是在讀取csv時我可以包括在列中進行更改的任何技巧,或者我需要編寫一個函數來讀取該特定列,然后將其值更改為Dr.(0)和Cr。 (1)
正如@Stephan在他的答案中所示, as.numeric(logical)
在這種情況下效果很好( ifelse
也會ifelse
),但是如果您發現自己處於Transaction
可以有兩個以上值的情況,則可以創建一個命名向量用作映射
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
您無法在讀取數據時執行此操作,但是一旦讀取數據,替換就很簡單了:
> 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.