rm(list = ls())
###############################input data new
data_1 <- iris
head(data_1)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
######################################
colnames(data_1)
## [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
str(data_1)
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
data_1_ave <- aggregate(data_1[1:4], list(Species = data_1$Species), FUN = mean, na.rm = TRUE)
data_1_ave
## Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1 setosa 5.006 3.428 1.462 0.246
## 2 versicolor 5.936 2.770 4.260 1.326
## 3 virginica 6.588 2.974 5.552 2.026
data_1_sd <- aggregate(data_1[1:4], list(Species = data_1$Species), FUN = sd, na.rm = TRUE)
data_1_sd
## Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1 setosa 0.3524897 0.3790644 0.1736640 0.1053856
## 2 versicolor 0.5161711 0.3137983 0.4699110 0.1977527
## 3 virginica 0.6358796 0.3224966 0.5518947 0.2746501
colnames(data_1_sd)[2:5] <- paste0(colnames(data_1_sd[2:5]), "_sd")
data_1_sd
## Species Sepal.Length_sd Sepal.Width_sd Petal.Length_sd Petal.Width_sd
## 1 setosa 0.3524897 0.3790644 0.1736640 0.1053856
## 2 versicolor 0.5161711 0.3137983 0.4699110 0.1977527
## 3 virginica 0.6358796 0.3224966 0.5518947 0.2746501
#####################################
data_2 <- merge(data_1_ave, data_1_sd, by = colnames(data_1_sd)[1])
data_2 <- data_2[, c(1,2,6)]
data_2
## Species Sepal.Length Sepal.Length_sd
## 1 setosa 5.006 0.3524897
## 2 versicolor 5.936 0.5161711
## 3 virginica 6.588 0.6358796
#######################################################
data_2$Sepal.Length_merge <- paste(format(round(data_2$Sepal.Length,2),nsmall = 2),
format(round(data_2$Sepal.Length_sd,2),nsmall = 2),
sep = "\u00B1")
data_2
## Species Sepal.Length Sepal.Length_sd Sepal.Length_merge
## 1 setosa 5.006 0.3524897 5.01±0.35
## 2 versicolor 5.936 0.5161711 5.94±0.52
## 3 virginica 6.588 0.6358796 6.59±0.64
dir_path <- getwd()
write.csv(data_2, paste0(dir_path,Sys.Date(),"-","iris_plus_minus_average_sd.csv"),row.names = FALSE)