# 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