Deleting Columns in R
subset is indicated in the main table
E1= subset(Table, select = -c(Winter,Autumn) )
উপরের সিনট্যাক্স এ subset দিয়ে বোঝাচ্ছে আমরা মেইন টেবিলের একটা সাবসেট তৈরি করবো। পরের Table লেখাটা ইন্ডিকেট করে আমরা কোন টেবিলের সাবসেট তৈরি করবো সেটা। select বুঝাচ্ছে কোন কোন কলাম বা রো আমরা সিলেক্ট করতে চাই। এখানে মজার বিষয় হলো c বা কম্বাইন সাইনের আগে মাইন্সা (-) সাইনে মিন করে কলাম বাদ দিয়ে দেয়া। অর্থাৎ এই কমান্ড দিলে এমন একটা টেবিল বা সাবসেট তৈরি হবে যেখানে মেনি টেবিল থেকে Winter ও Autumn নামের কলাম বাদ পড়ে যাবে।
Separating column in a new data table in R
E2 = subset(Table, select = c(Winter,Autumn) )
অন্যদিকে c এর আগে মাইনাস সাইনে নেই মানে হলো Winter and Autumn নামের কলাম দিয়ে নতুন সাবসেট কঠিত হবে।
Replace data in R
Table[2,3] <- 111
অনেক সময় টেবিলের একটা নির্দিষ্ট সেলের ডেটা চেঞ্জ করার প্রয়োজন হয়। সেক্ষেত্রে উপরের সিনট্যাক্স ফলো করতে হয়। এখানে টেবিল বলতে যে টেবিলের ভেতর মান চেঞ্জ করতে চাই সেই টেবিলের নাম। এবং ব্রাকেটের ভেতরে ২ ও ৩ দ্বারা যথাক্রমে রো নাম্বার ও কলাম নাম্বার বোঝায়। ১১১ হচ্ছে যে নতুন মান আমরা রিপ্লেস করতে চাই।
Arranging columns in R
RR1 <- Table[,c(2,1,4,3)]
Arranging rows in R
RR2 <- Table[c(2,1,3),]
টেবিলে রো বা কলাম রিএরেঞ্জ করতে চাইলে ব্রাকেটের ভেতর এরেঞ্জমেন্ট সিরিয়াল নাম্বার দিতে হবে। এখানে ২,১,৪,৩ হলো কলাম রিএরেঞ্জ এর অর্ডার।
Adding values in columns in R
Table$Total <- rowSums(Table[,c(2,3)],na.rm = T)
Table
Average Column Values in R
Table$Average <- rowMeans(Table[,c(2,3,4)], na.rm = T)
Table
কোন টেবিলের টোটাল বা এভারেজ বের করে সেটা টেবিলে এড করতে চাইলে উপরের সিনট্যাক্স ব্যবহার করতে হয়। $ সাইন দিয়েন নতুন কলাম ক্রিয়েট হবে এবং sum and means এর ক্ষেত্রে rowSums ও rowMeans ব্যবহার হয়। কোন কোন কলামের sum and total বের করবো সেটা কম্বাইন সিনট্যাক্স এর ভেতরে উল্লেখ করা হয়। na.rm দ্বারা non applicable remover বুঝায়। এর অর্থ হলো এই কলাম গুলো মধ্যে যদি কোন মিসিং ব্যারিয়েবল থাকে সেটা রিমুভ করে দিবে। এই সিনট্যক্স ব্যবহার না করলে মিসিং ভেলু থাকার কারনে R আমাদের কমান্ড ফলো করতে পারবে না।
Subtraction of Column Values in R
Table$Winter_Autumn = Table$Winter-Table$Autumn
Table
Exporting table from R
Exporting table from R as CSV format
write.csv(Table,"F:/My course/R/6th Batch 25 July R Course/Table.csv", row.names = FALSE)
write.csv(Table,"Table.csv", row.names = TRUE)
এই ফাংশন গুরুত্বপূর্ন, তাই মুখস্থ রাখা দরকার।
write.csv(Table,"Table.csv", row.names = FALSE)
কোন টেবিল যদি আমরা সেভ করতে চাই তাহলে উপরের সিনট্যক্স ফলো করা হয়। row.names = TRUE অর্থ হলো টেবিল এক্সপোর্ট করার সময় রো এর নাম থাকবে। যদি আমর =False দিয়ে থাকি তাহলে টেবিলে রো এর নাম থাকবে না।
Exporting table from R as Excel format
nstall.packages("writexl")
library("writexl")
টেবিলকে এক্সেল ফর্মাটে সেইভ করতে চাইলে writexl প্যাকেজ ইন্সটল দিয়ে লাইব্রেরি কল করে নিতে হবে।
write_xlsx(Table,"Table.xlsx")
এবং এর পরে উপরের সিনট্যক্স ব্যবহার করতে হবে।
Default data loaded in R
data()
Selecting a random data set
View(mtcars)
আমাদের প্রাকটিস এর জন্য R ক্লাউডে অনেক ডেটা সেট দেয়া থাকে। আমরা চাইলেই data() ব্যবহার করে পছন্দমত ডেটা ব্যবহার করতে পারি। এখানে mtcars একটা ডেটা সেটের নাম।
অনেক সময় বড় টেবিলের ক্ষেত্রে আমরা হেডিংগুলোর নাম ভুলে যায়। সেক্ষেত্রে একঝলক দেখে নেয়ার জন্য head(ডেটাসেটের নাম) ব্যবহার করে দেখে নিতে পারি।
Importing table in R
Importing new table from computer (csv file) in
BA=read.csv("Biol_data.csv")
Importing data by selecting files
#BA=read.csv(file.choose(T))
এই কমান্ড ব্যবহার করে আমরা মেনুয়ালি ফাইল চুজ করে ইম্পোর্ট করতে পারি।
View(BA)
Data filtering in R
ডেটা ফিল্টারিং ডেটা এনালাইসিস বা ভিজুয়ালিজেশান এর গুরুত্ত্বপূর্ন অংশ। এই ধাপে ডেটা ফিল্টারিং এর বিভিন্ন ধাপ দেখানো হবে।
install.packages("dplyr")
library(dplyr)
ডেটা ফিল্টারিং করতে হলে আমাদের “dplyr” (ডিপলেয়ার) প্যাকেজ ইন্সটল করে লাইব্রেরি কল করে নিতে হবে।
BC <- filter(BA,Stations=='A')
BU <- filter(BA,Depth==3)
BY <- filter(BA,Depth==c(1,4))
এর পরে ফিল্টার সিনট্যাক্স ব্যববহার করে ফিল্টার করা হয়। উপরের কমান্ড গুলোতে BA হলো আমাদের ডেটা সেটের বা টেবিলের নাম। Station হলো কিসের বেসিসে ফিল্টারিং হবে। এটা আপনার ডেটার উপর ডিপেন্ড করে আপনি নাম চেঞ্জ করবেন। শেষের কমান্ডে ১,৪ হলো Depth এর দুইটা শর্ত। আপনি চাইলে একাধিক কমান্ড করতে পারেন ফিল্টারিং এর ক্ষেত্রে।
BP <- filter(BA,Stations==c('A','B')) #code will not properly work
কিন্তু আমাদের ভ্যারিয়েবল যদি ক্যারেকটার ভ্যারিয়েবল বা নাম টাইপ হয় তাহলে উপরের মত আমরা একসাথে দুইটা শর্ত দিতে পারিনা। এটাকে R এর একটা সীমাবদ্ধতা হিসাবে ধরা হয়।
Install the package:
devtools::install_github("rstudio/addinexamples", type = "source")
এই সমস্যা থে মুক্তির পথ হলো আমাদের আলাদাভাবে উপরের প্যাকেজ ইন্সটল দিতে হবে। এক্ষেত্রে আলাদা ভাবে লাইব্রেরি করার প্রয়োজন হয়না।
GG <- filter(BA, Stations %in% c('A', 'B'))
এর পরে উপরের মত করে শুধু == এর যায়গায় %in% বসিয়ে আমরা ফিল্টারিং করতে পারি।
FR <- filter(BA, Latitude == 18.0)
Average, Mean, Median, max-min (Range) in R
summary(BA)
সামারি (summary) কমান্ড ব্যবহার করে আমরা ডেটার সামারি পেলেও সেটা থেকে বেশ এডভান্স টুলস ইউজ করে আমরা পছন্দমত সামারি বের করতে পারি।
install.packages("vtable")
library(vtable)
সেক্ষেত্রে আমাদের উপরের প্যাকেজ ইন্সটল করে লাইব্রেরি কল করে নিতে হবে।
st(BA[,6:9])
st কে বলা হয় Summary Table Function. অর্থাৎ কোন টেবিলের বা কোন নির্দিষ্ট কলামের সামারি দেখতে চাইলে আমরা এই ফাংশন ব্যবহার করি। এখানে BA হলো টেবিলের নাম। ৬ঃ৯ হলো ঐ তেবিলের ৬ থেকে ৯ নাম্বার কলাম। যেহেতু কলাম সেহেতু নিয়ম অনুসারে আমরা কমা এর পরে বসিয়েছি।
install.packages("dplyr")
library(dplyr)
#pipe operator %>% = Alt + Shift + M
“dplyr” provide easy tools for the most common data manipulation tasks. Descepritive statistics এ এডভান্স টুলস ইউজ করতে মুলত এই ফাংশন ব্যবহার হয়ে থাকে।
ZZ <- BA %>%
group_by(Zones) %>%
summarise(
mean = mean(Phytoplankton),
std = sd(Phytoplankton))
এখানে BA হলো ডেটাসেটের নাম। %>% হলো পাইপ অপারেশন। অর্থাৎ একটা কমান্ডের সাথে অন্যটার জুড়ে দিতে আমরা %>% সাইন ব্যবহার করবো। অন্যন্য ক্ষেত্রে সাধারণত + সাইন ব্যবহার করা হয়। আমরা ডেটা সেটের ভ্যারিয়েবলকে (কলাম) কোন গ্রুপ অনুসারে ভাগ করবো সেটা group_by ফাংশন ব্যবহার করা হয়। এর পরে ঐ ভ্যারিয়েবলের কি কি সামারি আমাদের দরকার সেটা summarise ফাংশনের মধ্যে উল্লেখ করতে হবে।
ZZ$Average2 <- paste((ZZ$mean),"±",(ZZ$std))
ZZ$Average1 <- paste(round(ZZ$mean,2),"±",round(ZZ$std,2))
এইধাপে আমরা ZZ টেবিলের সাথে নতুন কলাম যোগ করবো যেখানে এভারেজের সাথে ± স্টান্ডার্ড ডেভিয়েশন দেখাবে। সেক্ষেত্রে paste ফাংশন ব্যাবহার করতে হবে। Mean and SD এর ক্ষেত্রে দশমিকের পরে যেন দুই সংখ্যা বসে সে কারনে round ফাংশন ব্যবহার হয়েছে ZZ$mean এর পরে দুই লেখা হয়েছে।
#alternative way
YY <- ZZ %>%
mutate_if(is.numeric, round,2)
কোন টেবিলে যদি নিউমেরিক ও ক্যারেকটার দুই ধরনের ভ্যারিয়েবল থাকে এবং আমরা যদি সব নিউমেরিক ভ্যারিয়েবলে দশমিকের পরে নির্দিষ্ট সংখ্যা রাখতে চাই তাহলে mutate_if ফাংশন ব্যবহার করা হয় এবং উপরের মত করে কমান্ড দিতে হবে যেখানে ZZ হলো টেবিলের নাম।
YY$Average <- paste(YY$mean,"±",YY$std)
install.packages("table1")
library(table1)
table1 package টা খুবই দারুন একটা প্যাকেজ যেখানে আমরা এক টেবিলে মোটামুটি সামারি স্টাটিস্টিক্স যা যা প্রয়োজন সব পেয়ে যাই।
table1::label(BA$Phytoplankton)
table1::label(BA$Diatoms)
table1::label(BA$Dinoflagilates)
table1::label(BA$Cyanobacteria)
table1::label(BA$Temperature)
table1::table1(~Phytoplankton+Diatoms+
Dinoflagilates+Cyanobacteria+
Temperature| Depth, data = BA)
table1::table1(~Phytoplankton+Diatoms+
Dinoflagilates+Cyanobacteria+
+Temperature| Zones, data = BA)
Just Mean Table in R
Zone wise average
J1 <- aggregate(BA[,c(6:17)], list(BA$Zones), mean)
J2 <- aggregate(BA[,c(6:17)], list(BA$Zones), sd)
J3 <- aggregate(BA[,c(6:17)], list(BA$Stations), max)
J4 <- aggregate(BA[,c(6:17)], list(BA$Stations), min)
J5 <- aggregate(BA[,c(6:17)], list(BA$Zones), length)
#From BU Data set
J6 <- aggregate(BU[,1], list(BU$Zones), list)
Bar plot in R
library(ggplot2)
#Barplot of numerics
ggplot(data=BA,
aes(x=Stations, y=Phytoplankton))+
geom_bar(stat="identity")
বার প্লটের ক্ষেত্রে stat="identity" কমান্ড বাই ডিফল্ট দিতে হয়।
Barplot of numerics in R
BU <- filter(BA,Depth==3)
ggplot(BU, aes(Stations,
Phytoplankton))+
geom_bar(stat="identity")+
geom_abline(intercept = 200)+
geom_text(aes(label = Phytoplankton),
vjust = -0.6,
angle=0)
geom_bar এর জায়গাতে আমাদের প্রয়োজন মত গ্রাফের নাম দিতে হবে। যেমন বার ডায়াগ্রামের জন্য geom_bar ব্যবহার হয়েছে, লাইন ডায়াগ্রামের জন্য geom_line ব্যবহার হবে।
Geom_abline একটা নির্দিষ্ট পয়েন্ট থেকে একটা রেখা তৈরি করার ক্ষেত্রে ব্যবহার হবে।
geom_text ব্যবহার হয় ডেটা লেবেলিং এর ক্ষেত্রে। vjust ব্যবহার হবে লেবেলিং কোথায় হবে সেটা বুঝাতে, এবং angle হলো কত ডিগ্রীতে অবস্থান করবে।
বার প্লটের ক্ষেত্রে stat="identity" ব্যবহার হয় যদি আমাদের দুই এক্সিসেই ( x and y) মান থাকে।
Barplot of groups in R
ggplot(BA,
aes(Zones))+
geom_bar()+
theme_classic()
#removing background
theme_set(theme_classic())
EE <- ggplot(BA,
aes(Stations,
Phytoplankton))+
geom_bar(stat="identity",
width = 0.9,
fill="tomato2") +
labs(title="Phytoplankton Abundances",
subtitle="Concentration in different stations",
caption="Source: Biol_data",
y="Phytoplankton (cell/L)",
x="Study Area/Name of Stations") +
theme(axis.text.x = element_text(angle=65, vjust=0.5), axis.text.y = element_text(angle=65, vjust=0.5))
EE
labs ফাংশন ব্যবহার হয় ডায়াগ্রামের বিভিন্ন লেবেলিং এর জন্য যেমন টাইটেল, সাবটাইটেল, ক্যাপশ, ইত্যাদি। theme ফাংশনে axis.text.x = element_text ও axis.text.y = element_text ব্যবহার হয় দুইটা এক্সিস এর ভেলুর বিভিন্ন ধরনের পরিবর্তনের জন্য।
Segmented Bar plot with 1 group in R
EE+
facet_wrap(~Depth)
পূর্বে যে বার প্লট ড্র করেছি সেটাকে যদি আমরা কোন একটা ক্যাটাগরি বেসিসে করতে চাই তাহলে facet_wrap ফাংশন ব্যবহার করতে হয়। কিসের বেসিসে করবো সেটা ব্রাকেটের মধ্যে রাখতে হয়।
Y এক্সিসের ভেলুগুলো যদি আমাদের পছন্দমতভাবে দিতে হয় তাহলে scale_y_continuous ফাংশন ব্যবহার করতে হয় এবং নিচের ফাংশন ব্যবহার করতে হয়।
scale_y_continuous(breaks=seq(0,40,5))
এখানে ব্রাকেটের মধ্যের ভেলুর অর্থ হলো ০ থেকে ৪০ পর্যন্ত মান ৫ ইন্টারভালে দেখাবে।
Segmenting bar plot with 2 groups
EE +
facet_grid(BA$Zones~BA$Depth)+theme()
Facet_grid এবং facet_wrap এর পার্থক্য হলো ward এর ক্ষেত্রে আমরা একটা মাত্র ক্যাটাগরির বেসিসে আলাদা আলাদা গ্রাফ করতে চাই, অন্যদিকে grid এ দুই বা ততধিক ন্যারিয়েবলের বেসিসে গ্রাফ বানাতে চাই।
Error Bars in Bar diagram in R
Error bars are used to indicate the estimated error in a measurement. In other words, an error bar indicates the uncertainty in a value.
library(dplyr)
#Data filtering for single station names
BU <- filter(BA,Depth==3)
ggplot(BU,aes(Stations,Phytoplankton))+
geom_bar(stat = "identity")+
geom_errorbar(aes(x=Stations,
ymin=Phytoplankton-sd(Phytoplankton),
ymax=Phytoplankton+sd(Phytoplankton)),
width=0.3,
colour="orange",
alpha=0.9, #Modify colour transparency
size=0.3)
বার ডায়াগ্রামে ইরোর বার যোগ করতে চাইলে geom_errorbar ফাংশন যোগ করতে হয়। aesthatic ফাংশনের মধ্যে ymin and ymax রাখতে হবে। ইরোর বার কতটা ট্রান্সপ্যারেন্ট হবে সেটা alpha এর মাধ্যমে প্রকাশ করা হয়।

Comments
Post a Comment