data()

datairis <- iris
?iris

library(dplyr)
data1 <- tbl_df(datairis)
data1 <- datairis
?select  # remove columns
data2 <- select(data1, -Species)
?filter  # remove rows
data3 <- filter(data2, Petal.Length > 6.5)
data3
select(data3, Sepal.Length:Petal.Length)
select(data3, -(Sepal.Length:Petal.Length))
select(data3, Sepal.Length, Petal.Length)
dataTemp <- rbind(data3, c(1, 2, NA, 3))
dataTemp
na.omit(dataTemp) # remove all rows with NAs

# one way to normalize data
scaledata2 <- scale(data2)
colMeans(scaledata2)  # faster version of apply(scaled.dat, 2, mean)
apply(scaledata2, 2, sd)

# save data to current working directory
# as a text file
write.table(scaledata2, "data.txt", sep=" ", 
            row.names = FALSE,
            col.names = FALSE)

# install.packages("TDAmapper")
library("TDAmapper")

# The fastcluster package is not necessary.  By loading the
# fastcluster package, the fastcluster::hclust() function 
# automatically replaces the slower stats::hclust() function
# whenever hclust() is called.
# install.packages("fastcluster") 
require(fastcluster) 

# The igraph package is necessary to view simplicial complexes
# (undirected graph) resulting from mapper1D().

library(igraph)
P<- select(tbl_df(scaledata2), Petal.Length)
# Apply mapper
m1 <- mapper1D(
  distance_matrix = dist(data.frame(scaledata2)),
  filter_values = P,
  num_intervals = 10,
  percent_overlap = 50,
  num_bins_when_clustering = 10)

# create and plot mapper graph
g1 <- graph.adjacency(m1$adjacency, mode="undirected")
plot(g1, layout = layout.auto(g1) )

