У меня есть группа из разных стран в R, и я хочу создавать категории на основе значения определенной переменной (в данном случае «var3») в конкретном году (здесь 3).Категоризировать группы в панели по значению переменной в конкретном году в R
Пример того, что я в настоящее время:
# create data
test.data = as.data.frame(matrix(rexp(200, rate=.1), ncol=5))
colnames(test.data) = c("year", "country", "var1", "var2", "var3")
test.data$year = rep.int(1:5, 8)
test.data$country = rep(1:8, each=5)
# calculate median, minimum and maximum of 'var3'
median = quantile(x = test.data[test.data$year == 3, 5], probs = c(0.5))
min = min(test.data[test.data$year == 3, 5])
max = max(test.data[test.data$year == 3, 5])
# create category variable based on values of 'var3'
test.data$cat.1 = cut(test.data$var3, c(min, median, max))
В этом случае значение «Кат.1» зависит от значения «var3» соответствующего наблюдения, но я хочу, чтобы зависеть от значение конкретного года конкретной страны (т. е. я хочу того же значения для всех лет конкретной страны). Есть ли простой способ сделать это или мне нужно сделать это вручную (выберите страны каждой группы и присвойте им значения). Если количество групп постоянное, то это вручную, но это немного громоздко, если вы хотите попробовать разные размеры группы.
В настоящее время результат выглядит следующим образом:
year country var1 var2 var3 cat.1
1 1 1 4.4206363 9.32628504 4.0988089 (1.2,6.71]
2 2 1 7.6072491 6.30949828 39.5694414 <NA>
3 3 1 3.3774183 7.94397550 8.8419793 (6.71,22.2]
4 4 1 1.0300372 9.93858310 0.4908481 <NA>
5 5 1 6.4514008 2.10367840 29.6052797 <NA>
6 1 2 8.7609877 5.76332181 17.4117561 (6.71,22.2]
7 2 2 6.1253021 0.17258071 23.9096280 <NA>
8 3 2 48.3335241 1.19255084 3.3644827 (1.2,6.71]
9 4 2 34.1683821 10.98216846 29.0255100 <NA>
10 5 2 15.5824154 2.53484781 16.3466249 (6.71,22.2]
Но я хочу вместо этого:
year country var1 var2 var3 cat.1
1 1 1 4.4206363 9.32628504 4.0988089 (6.71,22.2]
2 2 1 7.6072491 6.30949828 39.5694414 (6.71,22.2]
3 3 1 3.3774183 7.94397550 8.8419793 (6.71,22.2]
4 4 1 1.0300372 9.93858310 0.4908481 (6.71,22.2]
5 5 1 6.4514008 2.10367840 29.6052797 (6.71,22.2]
6 1 2 8.7609877 5.76332181 17.4117561 (1.2,6.71]
7 2 2 6.1253021 0.17258071 23.9096280 (1.2,6.71]
8 3 2 48.3335241 1.19255084 3.3644827 (1.2,6.71]
9 4 2 34.1683821 10.98216846 29.0255100 (1.2,6.71]
10 5 2 15.5824154 2.53484781 16.3466249 (1.2,6.71]
Возможно, вы захотите посмотреть на 'dplyr ::: group_by' в связи с' dplyr ::: mutate'. – coffeinjunky
Спасибо за подсказку! –
Можете ли вы создать ожидаемый или желаемый результат в виде таблицы, а не описывать ее словами? – user5249203