簡體   English   中英

根據R中特定年份的變量值對面板中的組進行分類

[英]Categorize groups in panel according to value of a variable in a specific year in R

我在R中有一個不同國家的小組,我想根據特定年份(此處為3)中特定變量(在本例中為“ var3”)的值來創建類別。

我目前擁有的一個例子:

# 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))

在這種情況下,“ cat.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]

遵循以下內容吧? 這首先為每個國家/地區創建一個變量,該變量對應於第3年的var3 ,然后刪除該變量。 如果您按組表示的是國家/地區,則此方法適用於許多組。

library(dplyr)
out <- test.data %>% group_by(country) %>% mutate(to.cut = var3[year==3] )
out$cat.1 = cut(out$to.cut, c(min, median, max), include.lowest=T)
out

Source: local data frame [40 x 7]
Groups: country [8]

    year country      var1      var2      var3       cat.1   to.cut
   (int)   (int)     (dbl)     (dbl)     (dbl)      (fctr)    (dbl)
1      1       1  2.945957  8.785060 21.820063 (10.3,35.5] 12.06913
2      2       1  1.473719 29.944750  6.915839 (10.3,35.5] 12.06913
3      3       1  8.880734  3.624519 12.069131 (10.3,35.5] 12.06913
4      4       1 31.746000  9.698126  5.929075 (10.3,35.5] 12.06913
5      5       1 34.639945  2.983025 15.438284 (10.3,35.5] 12.06913
6      1       2 16.757240  8.719741 27.412963 (10.3,35.5] 14.74931
7      2       2  1.155467  3.146425  1.730943 (10.3,35.5] 14.74931
8      3       2  1.738710  2.292280 14.749311 (10.3,35.5] 14.74931
9      4       2 13.120079  0.130744  3.000918 (10.3,35.5] 14.74931
10     5       2 27.898422 10.891313 20.912835 (10.3,35.5] 14.74931

評論:由於我們為隨機數生成器提供了不同的種子,因此數字與您的表明顯不同。 在您的表格中, cut的結果因country 1country 2而異。 由於切割已在所有國家/地區進行,因此這種差異很可能是隨機性造成的。 如果這不是您所期望的,請提供可以復制原始表的種子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM