# Rotating points on a plane

If we have a pair of coordinates $$(x,y)$$, let's say

pt = {1,2}


then we can easily rotate the coordinates, by an angle $$\theta$$, by using the rotation matrix

R = {{Cos[\[Theta]], -Sin[\[Theta]]}, {Sin[\[Theta]], Cos[\[Theta]]}};


as

pt2 = pt.R;


Now let's assume that we have a collection of points in the form

data = {{1}, {-0.3, 1}, {2, -0.2}, {2}, {-2, 1}, {4,-2}, {3}, {1, 1}, {-0.2, -0.3}}


where the integers 1, 2 and 3 count the subsets of the list data.

My question: how can we rotate the $$(x,y)$$ coordinates of the list data by and angle, let's say $$2\pi/3$$ and create a new list, data2 of the form

data2 = {{1}, {rotated x, rotated y}, {rotated x, rotated y}, {2}, {rotated x, rotated y}, {roatetd x, rotated y}, ...}


Any suggestions?

This should give what you want:

data2=data/.{x_?NumericQ,y_?NumericQ}:>RotationMatrix[\[Theta]].{x,y}


Maybe this way?

data = {{1}, {-0.3, 1}, {2, -0.2}, {2}, {-2, 1}, {4, -2}, {3}, {1, 1}, {-0.2, -0.3}};
R = {{Cos[\[Theta]], -Sin[\[Theta]]}, {Sin[\[Theta]], Cos[\[Theta]]}};
data2 = data;
data2[[2 ;; ;; 3]] = data[[2 ;; ;; 3]].Transpose[R];
data2[[3 ;; ;; 3]] = data[[3 ;; ;; 3]].Transpose[R];


However, I advice not to store your data this way because, as a ragged list, it cannot be packed.