এই প্রশ্নটি বেশ কয়েক বছর পুরনো, তবে আমি তাতে হোঁচট খেয়েছি, যার অর্থ সম্ভবত অন্যরাও করবে।
readr
লাইব্রেরি / প্যাকেজ এটি কিছু চমৎকার বৈশিষ্ট্য আছে। এর মধ্যে একটি "অগোছালো" কলামগুলি ব্যাখ্যা করার একটি দুর্দান্ত উপায়।
library(readr)
read_csv("numbers\n800\n\"1,800\"\n\"3500\"\n6.5",
col_types = list(col_numeric())
)
এই ফলন
উত্স: স্থানীয় ডেটা ফ্রেম [4 x 1]
numbers
(dbl)
1 800.0
2 1800.0
3 3500.0
4 6.5
ফাইলগুলিতে পড়ার সময় একটি গুরুত্বপূর্ণ বিষয়: আপনাকে হয় প্রাক-প্রক্রিয়া করতে হবে, উপরের মন্তব্যটির মতো sed
, অথবা পড়ার সময় আপনাকে প্রক্রিয়া করতে হবে । প্রায়শই, আপনি যদি এই বিষয়টির পরে জিনিসগুলি ঠিক করার চেষ্টা করেন তবে কিছু বিপজ্জনক অনুমান করা আছে যা খুঁজে পাওয়া শক্ত। (যে কারণে ফ্ল্যাট ফাইলগুলি প্রথমে এত খারাপ।
উদাহরণস্বরূপ, আমি যদি পতাকাটি না দিয়ে থাকি তবে আমি এটি অর্জন করতে col_types
পারতাম:
> read_csv("numbers\n800\n\"1,800\"\n\"3500\"\n6.5")
Source: local data frame [4 x 1]
numbers
(chr)
1 800
2 1,800
3 3500
4 6.5
(লক্ষ্য করুন যে এটি এখন ক এর পরিবর্তে একটি chr
( character
) numeric
)
অথবা, আরও বিপজ্জনকভাবে, যদি এটি যথেষ্ট দীর্ঘ হয় এবং প্রাথমিক উপাদানগুলির বেশিরভাগটিতে কমা থাকে না:
> set.seed(1)
> tmp <- as.character(sample(c(1:10), 100, replace=TRUE))
> tmp <- c(tmp, "1,003")
> tmp <- paste(tmp, collapse="\"\n\"")
(যেমন শেষ কয়েকটি উপাদান দেখতে দেখতে :)
\"5\"\n\"9\"\n\"7\"\n\"1,003"
তাহলে আপনি সেই কমাটি পড়তে মোটেই সমস্যা পাবেন!
> tail(read_csv(tmp))
Source: local data frame [6 x 1]
3"
(dbl)
1 8.000
2 5.000
3 5.000
4 9.000
5 7.000
6 1.003
Warning message:
1 problems parsing literal data. See problems(...) for more details.
setAs("character", "logical.Y.N", function(from) c(Y=TRUE,N=FALSE)[from] )
)।