There is a data set, the names of some columns of the number (year). When you try to automate the creation of a pivot table, you get an error.
df <- read.table(text = "value class 2000 2001 2002 123 class1 subclass1 subclass3 subclass1 564 class1 subclass1 subclass3 subclass2 564 class1 subclass1 subclass3 subclass3 213 class2 subclass1 subclass4 subclass4 856 class2 subclass1 subclass5 subclass4 22 class3 subclass6 subclass6 subclass4 5 class4 subclass1 subclass3 subclass4", header = TRUE) names(df) <- c("value", "class", "2000", "2001", "2002") It works without problems:
data.frame(with(df, tapply(value, INDEX = list(class, `2000`), FUN = sum))) data.frame(with(df, tapply(value, INDEX = list(class, `2001`), FUN = sum))) data.frame(with(df, tapply(value, INDEX = list(class, `2002`), FUN = sum))) If you try to do this cycle produces an error.
years <- c("2000", "2001", "2002") for (i in 1:3) { data.frame(with(df, tapply(value, INDEX = list(class, years[i]), FUN = sum))) } Error in tapply(value, INDEX = list(class, years[i]), FUN = sum) : arguments must have same length Can someone tell me what my mistake is and how to fix it?