# Create a sample data frame
df <- data.frame(
  var1 = c(1, 5, 10, 15, 20),
  var2 = c(2, 6, 12, 18, 24),
  var3 = c(3, 7, 14, 21, 28),
  var4 = c(4, 8, 16, 24, 32)
)

# Display original data
print("Original data:")
## [1] "Original data:"
print(df)
##   var1 var2 var3 var4
## 1    1    2    3    4
## 2    5    6    7    8
## 3   10   12   14   16
## 4   15   18   21   24
## 5   20   24   28   32
# Method 1: Using apply to scale each row
# t() transposes the data frame, scale() scales it, then t() transposes back
scaled_df1 <- as.data.frame(t(apply(df, 1, scale)))
# Fix column names after double transposition
colnames(scaled_df1) <- colnames(df)
# Display row-scaled data
print("Row-scaled data:")
## [1] "Row-scaled data:"
print(scaled_df1)
##        var1       var2      var3     var4
## 1 -1.161895 -0.3872983 0.3872983 1.161895
## 2 -1.161895 -0.3872983 0.3872983 1.161895
## 3 -1.161895 -0.3872983 0.3872983 1.161895
## 4 -1.161895 -0.3872983 0.3872983 1.161895
## 5 -1.161895 -0.3872983 0.3872983 1.161895
# Method 2: Using a for loop for more clarity
scaled_df2 <- df
for(i in 1:nrow(df)) {
  #i = 1
  scaled_df2[i,] <- scale(as.numeric(df[i,]))
}

# Display row-scaled data (Method 2)
print("Row-scaled data (Method 2):")
## [1] "Row-scaled data (Method 2):"
print(scaled_df2)
##        var1       var2      var3     var4
## 1 -1.161895 -0.3872983 0.3872983 1.161895
## 2 -1.161895 -0.3872983 0.3872983 1.161895
## 3 -1.161895 -0.3872983 0.3872983 1.161895
## 4 -1.161895 -0.3872983 0.3872983 1.161895
## 5 -1.161895 -0.3872983 0.3872983 1.161895