রাইনেট টেবিল যখন অদ্ভুত নাম রয়েছে তখন হেডারে অযাচিত নেতৃস্থানীয় খালি কলামটি লিখেছে


92

এই উদাহরণটি পরীক্ষা করুন:

> a = matrix(1:9, nrow = 3, ncol = 3, dimnames = list(LETTERS[1:3], LETTERS[1:3]))
> a
  A B C
A 1 4 7
B 2 5 8
C 3 6 9

টেবিলটি সঠিকভাবে প্রদর্শিত হয়। ফাইল করার জন্য এটি লেখার দুটি ভিন্ন উপায় আছে ...

write.csv(a, 'a.csv') যা প্রত্যাশা অনুযায়ী দেয়:

"","A","B","C"
"A",1,4,7
"B",2,5,8
"C",3,6,9

এবং write.table(a, 'a.txt')যা স্ক্রু আপ

"A" "B" "C"
"A" 1 4 7
"B" 2 5 8
"C" 3 6 9

প্রকৃতপক্ষে, একটি খালি ট্যাব অনুপস্থিত .... যা ডাউন স্ট্রিমের জিনিসগুলির জন্য বাটের ব্যথা। এটি কি বাগ বা কোনও বৈশিষ্ট্য? এখানে কি কাজ আছে? (ব্যতীত write.table(cbind(rownames(a), a), 'a.txt', row.names=FALSE)

চিয়ার্স, ইয়ানিক

উত্তর:


141

উদ্ধৃতি ?write.table, বিভাগ CSV ফাইল :

ডিফল্টরূপে সারি নামের কলামের জন্য কোনও কলামের নাম নেই। যদি col.names = NAএবং row.names = TRUEএকটি ফাঁকা কলামের নাম যুক্ত করা হয়, তবে এটি স্প্রেডশিটগুলি পড়ার জন্য সিএসভি ফাইলগুলির জন্য ব্যবহৃত কনভেনশন।

সুতরাং আপনি অবশ্যই করবেন

write.table(a, 'a.txt', col.names=NA)

এবং আপনি পেতে

"" "A" "B" "C"
"A" 1 4 7
"B" 2 5 8
"C" 3 6 9

4
@ মারেক, রউনামস কলামে কোনও নাম যুক্ত করা কি সম্ভব হবে? অর্থাৎ, "" এর পরিবর্তে, "আইডি" বা একটি মতো কিছু যুক্ত করবেন?
দনাইল

4
@ ডনিয়েল আমি জানি যা থেকে আপনি পারবেন না। আপনি সারি নামগুলিকে ডেটা দিয়ে বাঁধতে পারেন এবং তাদের নাম দিতে পারেন (যেমন প্রশ্নের মধ্যে)
মারেক

4
@rusalkaguy আপনার সম্পাদনার কোনও অর্থ নেই। এই "সম্প্রসারণ" মূল প্রশ্নে রয়েছে ("ব্যতীত অন্যদিকে")
মেরেক

আপনি কীভাবে প্রতিটি স্তম্ভের নম্বরটি কোলের নামগুলিতে রাখবেন?
rrs

@ আরআরএস আপনি স্থির প্রস্থের বিন্যাস বলতে চান? এ GData প্যাকেজ থেকে write.fwf । এবং মন্তব্যের পরিবর্তে নতুন প্রশ্ন জিজ্ঞাসা করুন। আর তোমার কেন এমনটা দরকার ?!
মারেক 21

10

@ মারেকের খুব সহায়ক জবাবের জন্য একটি সামান্য সংশোধন করা হবে রোনামস কলামে একটি শিরোনাম যুক্ত হবে: অস্থায়ীভাবে ডেটা.ফ্রেমে প্রথম কলাম হিসাবে রনওমগুলি যুক্ত করুন এবং এটি লিখুন, আসল রৌনমগুলি উপেক্ষা করে।

> a = matrix(1:9, nrow = 3, ncol = 3, dimnames = list(LETTERS[1:3], LETTERS[1:3]))
> write.table(data.frame("H"=rownames(a),a),"a.txt", row.names=FALSE)

এবং আপনি পেতে

"H" "A" "B" "C"
"A" 1 4 7
"B" 2 5 8
"C" 3 6 9

এটি অন্তর্ভুক্ত করার জন্য আপনার মারেকের উত্তরটি সম্পাদনা করা উচিত, আমি মনে করি।
ব্যবহারকারী 8397947

3

যে কেউ কাজ করার জন্য tidyverse (dplyr, ইত্যাদি), rownames_to_column()থেকে ফাংশন tibble প্যাকেজ সহজে একটি কলাম, যেমন করতে row.names রূপান্তর করতে ব্যবহার করা যেতে পারে:

library('tibble')
a = as.data.frame(matrix(1:9, nrow=3, ncol=3, 
                  dimnames=list(LETTERS[1:3], LETTERS[1:3])))

a %>% rownames_to_column('my_id')

  my_id A B C
1     A 1 4 7
2     B 2 5 8
3     C 3 6 9

সঙ্গে এই মিশ্রন row.names=FALSEবিকল্পটি write.table()সব কলাম হেডারের নামের সাথে আউটপুটে ফলাফল নেই।


1

যারা ম্যাট্রিক্সের সাথে ম্যাট্রিক্স সংরক্ষণ করার সময় একই সমস্যাটি অনুভব করেন write.table()এবং সারি.নামস কলামটি রাখতে চান তাদের পক্ষে আসলে একটি অত্যন্ত সহজ সমাধান রয়েছে:

 write.table(matrix,file="file.csv",quote=F,sep=";", row.names=T
             col.names=c("row_name_col;val1_col","val2_col"))

এটি করে আপনি মূলত write.tableসারি.নামস কলামের জন্য শিরোনাম লেবেল তৈরি করে ফাংশনটি ট্রিক করছেন। ফলাফলের .csv ফাইলটি দেখতে এমন হবে:

row_name_col;val1_col;val2_col
row1;1;4 
row2;2;5 
row3;3;6 

আমি কল.নেমস = সি ("সারি_নাম"), কলনাম (ম্যাট্রিক্স) চেষ্টা করছি এবং অবৈধ 'কল.নেমস' স্পেসিফিকেশন বলায় একটি ত্রুটি পেয়েছি। কোন ধারণা কি ভুল? সি ("সারি_নাম", কলনাম (ম্যাট্রিক্স) সঠিক পাঠ্য দেয়।
মাইকেলE

write.tableদৈর্ঘ্যের একটি শিরোনাম আশা করুন ncol(matrix)এবং আপনি এটিকে আরও একটি দিচ্ছেন। আমি উপরের সমাধান চেষ্টা করেছি, এটা কাজ করে না, সেরা অন্যান্য সমাধানের মধ্যে মত একটি কলাম হিসাবে rownames সরানো হয় না
aurelien

0

আমি @ মেল থেকে একটি সাধারণ ফাংশন সংশোধন করেছি, যা সংযোগগুলি ব্যবহার করে নমনীয়তা যুক্ত করে adds ফাংশনটি এখানে:

my.write <- function(x, file, header, f = write.csv, ...){
# create and open the file connection
datafile <- file(file, open = 'wt')
# close on exit 
on.exit(close(datafile))
# if a header is defined, write it to the file (@CarlWitthoft's suggestion)
if(!missing(header)) {
writeLines(header,con=datafile, sep='\t')
writeLines('', con=datafile, sep='\n')
}
# write the file using the defined function and required addition arguments  
f(x, datafile,...)
}

আপনি 'Writ.table', 'write.csv', 'Writ.delim' ইত্যাদি হিসাবে ফাংশনটি নির্দিষ্ট করতে পারেন

চিয়ার্স!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.