[英]Read dataset in R in which comma is used for field separator and decimal point
你怎么能在R
讀取這個數據集,問題是這些數字是浮點數 ,就像4,000000059604644E+16
,它們用a分隔,
4,000000059604644E-16 , 7,999997138977056E-16, 9,000002145767216E-16
4,999999403953552E-16 , 6,99999988079071E-16 , 0,099999904632568E-16
9,999997615814208E-16 , 4,30000066757202E-16 , 3,630000114440918E-16
0,69999933242798E-16 , 0,099999904632568E-16, 55,657576767799999E-16
3,999999761581424E-16, 1,9900000095367432E-16, 0,199999809265136E-16
你如何在R中加載這個kinf數據集,所以它有3列。
如果我做
dataset <- read.csv("C:\\data.txt",header=T,row.names=NULL)
它將返回6列而不是3 ...
最好將輸入數據轉換為在浮點數中使用小數點而不是逗號。 你可以這樣做的一種方法是使用sed(看起來你正在使用Windows,所以你可能需要sed使用這種方法):
sed 's/\([0-9]\),\([0-9]\)/\1.\2/g' data.txt > data2.txt
文件data2
看起來是這樣的:
4.000000059604644E-16 , 7.999997138977056E-16, 9.000002145767216E-16
4.999999403953552E-16 , 6.99999988079071E-16 , 0.099999904632568E-16
9.999997615814208E-16 , 4.30000066757202E-16 , 3.630000114440918E-16
0.69999933242798E-16 , 0.099999904632568E-16, 55.657576767799999E-16
3.999999761581424E-16, 1.9900000095367432E-16, 0.199999809265136E-16
然后在R:
dataset <- read.csv("data2.txt",row.names=NULL)
這是一個使用三個read.table
調用的全R解決方案。 第一個read.table
語句將每個數據行讀取為6個字段; 第二個read.table
語句將字段正確地重新組合在一起並讀取它們,第三個字段從標題中獲取名稱。
fn <- "data.txt"
# create a test file
Lines <- "A , B , C
4,000000059604644E-16 , 7,999997138977056E-16, 9,000002145767216E-16
4,999999403953552E-16 , 6,99999988079071E-16 , 0,099999904632568E-16
9,999997615814208E-16 , 4,30000066757202E-16 , 3,630000114440918E-16
0,69999933242798E-16 , 0,099999904632568E-16, 55,657576767799999E-16
3,999999761581424E-16, 1,9900000095367432E-16, 0,199999809265136E-16"
cat(Lines, "\n", file = fn)
# now read it back in
DF0 <- read.table(fn, skip = 1, sep = ",", colClasses = "character")
DF <- read.table(
file = textConnection(do.call("sprintf", c("%s.%s %s.%s %s.%s", DF0))),
col.names = names(read.csv(fn, nrow = 0))
)
這使:
> DF
A B C
1 4.000000e-16 7.999997e-16 9.000002e-16
2 4.999999e-16 7.000000e-16 9.999990e-18
3 9.999998e-16 4.300001e-16 3.630000e-16
4 6.999993e-17 9.999990e-18 5.565758e-15
5 4.000000e-16 1.990000e-16 1.999998e-17
注意:問題中的read.csv
語句意味着有一個標題,但樣本數據沒有顯示。 我假設有一個標題,但如果沒有,則刪除skip=
和col.names=
arguments。
它不漂亮,但它應該工作:
x <- matrix(scan("c:/data.txt", what=character(), sep=","), byrow=TRUE, ncol=6)
y <- t(apply(x, 1, function(a) { left <- seq(1, length(a), by=2)
as.numeric(paste(a[left], a[left+1], sep="."))
} ))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.