簡體   English   中英

用R讀取csv文件中的分數

[英]Reading fractions in csv file with R

我有一個帶有標題的數字數據的文本文件,其中一些數字作為分數輸入,一些作為整數輸入,一些作為浮點輸入,例如:

col1name, col2name, col3name, col4name    
1, 2, 3, 4
0.5, 0.6, 0.7, 0.8
1/2, 2/3, 3/4, 4/5
1, 0.2, 3/3, 4

當我使用read.csv時,如何評估這些表達式並將其存儲為數字?

謝謝...

首先,將數據導入為字符串向量。 在問題中使用您的玩具示例我們可以通過

txt = "1, 2, 3, 0.3, 2/5, 0.75, 1/3"
dat = read.table(text = txt, sep = ",", stringsAsFactors = F)

一旦將數據放入字符向量中,我們就可以使用eval(parse())來評估表達式,就好像它們已經在控制台中輸入一樣。 不幸的是, eval沒有矢量化,所以我們將其包裝成sapply,以便依次將此函數應用於數據的每個元素

answer = sapply(dat, function(x) eval(parse(text = x)))

我們可以通過一次將上述方法應用於每列來擴展它以處理多行數據。 例如,像這樣

txt = "col1name, col2name, col3name, col4name
1, 2, 3, 4
0.5, 0.6, 0.7, 0.8
1/2, 2/3, 3/4, 4/5
1, 0.2, 3/3, 4"

dat = read.table(text = txt, sep = ",", stringsAsFactors = F, header = T)
answer = apply(dat, 2, function(this.col) sapply(this.col, function(x) eval(parse(text = x))))
#      col1name  col2name col3name col4name
# [1,]      1.0 2.0000000     3.00      4.0
# [2,]      0.5 0.6000000     0.70      0.8
# [3,]      0.5 0.6666667     0.75      0.8
# [4,]      1.0 0.2000000     1.00      4.0

我強烈建議在“data.table”包中使用fread()。 幾乎在所有情況下,它都非常快速且非常強大。

input.file <- fread("file_name.csv")

如果您的值仍然不是您要查找的格式,則可以使用“as.integer()”或“as.numeric()”:

input.file$`Column Name To Change` <- as.numeric(input.file$`Column Name To Change`)

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM