У меня самая странная проблема, которую я объясню, насколько смогу.Основная проблема заключается в том, что у меня проблема с повторным присоединением меток к библиотеке (Hmisc).При повторном присоединении пропускаются два столбца (S007_01, S010, то есть два столбца, которые были удалены, поскольку они были символьными столбцами S009 и S009A) без видимой причины.В результате перемаркировка начинается правильно, но поскольку она пропускает два столбца, остальные метки заканчиваются неправильными переменными:
У меня большой набор данных с символьными (преобразованными в фактор) и числовыми столбцами.Тиббл в дополнение к структуре нескольких переменных добавлен ниже.
# A tibble: 720 x 1,415
matchcode S001 S002 S002EVS S003 S003A S004 S006 S007 S007_01 S008 S009 S009A S010 S010_01 S010_02 S010_03 S010_04 S011 S012 S013 S013B S014 S015 S016
<fct> <dbl> <dbl> <dbl+l> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl+lbl> <dbl> <fct> <fct> <dbl> <dbl+l> <dbl+l> <dbl+l> <dbl+l> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 "JPN 198~ 2 1 -4 392 392 -4 81 81 3920120081 -4 JP JP -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4
2 "JPN 198~ 2 1 -4 392 392 -4 1113 1113 3920121113 -4 JP JP -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4
3 "JPN 198~ 2 1 -4 392 392 -4 40 40 3920120040 -4 JP JP -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4
4 "MEX 198~ 2 1 -4 484 484 -4 1780 2972 4840121768 -4 MX MX -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4
5 "MEX 198~ 2 1 -4 484 484 -4 833 2030 4840120826 -4 MX MX -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4
6 "MEX 198~ 2 1 -4 484 484 -4 623 1820 4840120616 -4 MX MX -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4
7 "HUN 198~ 2 1 -4 348 348 -4 736 3777 3480120736 -4 HU HU -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4
8 "HUN 198~ 2 1 -4 348 348 -4 565 3606 3480120565 -4 HU HU -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4
9 "HUN 198~ 2 1 -4 348 348 -4 388 3429 3480120388 -4 HU HU -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4
10 "AUS 198~ 2 1 -4 36 36 -4 421 4926 360120421 -4 AU AU -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4
str(dfsample)
Classes ‘data.table’ and 'data.frame': 240 obs. of 1415 variables:
$ matchcode : Factor w/ 240 levels "ALB 1998 ","ALB 2002 ",..: 108 134 88 12 4 73 117 232 5 25 ...
$ S001 :Class 'labelled' atomic [1:240] 2 2 2 2 2 2 2 2 2 2 ...
.. ..- attr(*, "label")= chr "Study"
.. ..- attr(*, "format.stata")= chr "%8.0g"
.. ..- attr(*, "labels")= Named num [1:7] -5 -4 -3 -2 -1 1 2
.. .. ..- attr(*, "names")= chr [1:7] "Missing; Unknown" "Not asked in survey" "Not applicable" "No answer" ...
$ S002 :Class 'labelled' atomic [1:240] 1 1 1 1 1 1 1 1 2 2 ...
.. ..- attr(*, "label")= chr "Wave"
.. ..- attr(*, "format.stata")= chr "%8.0g"
.. ..- attr(*, "labels")= Named num [1:11] -5 -4 -3 -2 -1 1 2 3 4 5 ...
.. .. ..- attr(*, "names")= chr [1:11] "Missing; Unknown" "Not asked in survey" "Not applicable" "No answer" ...
$ S002EVS :Class 'labelled' atomic [1:240] -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 ...
.. ..- attr(*, "label")= chr "EVS-wave"
.. ..- attr(*, "format.stata")= chr "%8.0g"
.. ..- attr(*, "labels")= Named num [1:9] -5 -4 -3 -2 -1 1 2 3 4
.. .. ..- attr(*, "names")= chr [1:9] "Missing; Unknown" "Not asked in survey" "Not applicable" "No answer" ...
$ S003 :Class 'labelled' atomic [1:240] 392 484 348 36 32 246 410 710 32 112 ...
.. ..- attr(*, "label")= chr "Country/region"
.. ..- attr(*, "format.stata")= chr "%8.0g"
.. ..- attr(*, "labels")= Named num [1:199] -5 -4 -3 -2 -1 4 8 12 16 20 ...
.. .. ..- attr(*, "names")= chr [1:199] "Missing; Unknown" "Not asked in survey" "Not applicable" "No answer" ...
$ S003A :Class 'labelled' atomic [1:240] 392 484 348 36 32 246 410 710 32 112 ...
.. ..- attr(*, "label")= chr "Country/regions [with split ups]"
.. ..- attr(*, "format.stata")= chr "%8.0g"
.. ..- attr(*, "labels")= Named num [1:199] -5 -4 -3 -2 -1 4 8 12 16 20 ...
.. .. ..- attr(*, "names")= chr [1:199] "Missing; Unknown" "Not asked in survey" "Not applicable" "No answer" ...
$ S004 :Class 'labelled' atomic [1:240] -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 ...
.. ..- attr(*, "label")= chr "Set"
.. ..- attr(*, "format.stata")= chr "%8.0g"
.. ..- attr(*, "labels")= Named num [1:7] -5 -4 -3 -2 -1 1 2
.. .. ..- attr(*, "names")= chr [1:7] "Missing; Unknown" "Not asked in survey" "Not applicable" "No answer" ...
$ S008 :Class 'labelled' atomic [1:720] -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 ...
.. ..- attr(*, "label")= chr "Interviewer number"
.. ..- attr(*, "format.stata")= chr "%8.0g"
.. ..- attr(*, "labels")= Named num [1:5] -5 -4 -3 -2 -1
.. .. ..- attr(*, "names")= chr [1:5] "Missing; Unknown" "Not asked in survey" "Not applicable" "No answer" ...
$ S009 : Factor w/ 100 levels "AD","AL","AM",..: 47 47 47 61 61 61 39 39 39 5 ...
$ S009A : Factor w/ 101 levels "AD","AL","AM",..: 48 48 48 62 62 62 40 40 40 5 ...
$ S010 :Class 'labelled' atomic [1:720] -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 ...
.. ..- attr(*, "label")= chr "Total length of interview"
.. ..- attr(*, "format.stata")= chr "%12.0g"
.. ..- attr(*, "labels")= Named num [1:5] -5 -4 -3 -2 -1
.. .. ..- attr(*, "names")= chr [1:5] "Missing; Unknown" "Not asked in survey" "Not applicable" "No answer" ...
$ S010_01 :Class 'labelled' atomic [1:720] -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 ...
.. ..- attr(*, "label")= chr "Time of interview: start hour"
.. ..- attr(*, "format.stata")= chr "%8.0g"
.. ..- attr(*, "labels")= Named num [1:5] -5 -4 -3 -2 -1
.. .. ..- attr(*, "names")= chr [1:5] "Missing; Unknown" "Not asked in survey" "Not applicable" "No answer" ...
Я хотел взять среднее значение этих переменных, что я сделал следующим образом:
# 1.Select numerical columns to calculate weighted average of
cols = sapply(df, is.numeric) # https://stackoverflow.com/questions/26082889/calculate-summary-statistics-e-g-mean-on-all-numeric-columns-using-data-table
cols = names(cols)[cols]
#2. Separate factor variables, to be added back again later
df <- as.data.frame(df)
ind1 <- names(df )[ sapply(df , is.factor) ]
dffactors<- df[ind1]
dffactors<- as.data.table(dffactors)
dffactors<- dffactors[,.SD[sample(.N, min(1,.N))],by = matchcode]
# 3. Taking the labels because the next operations removes the labels
dfclevellabels <- setNames(stack(lapply(df, label))[2:1], c("rn", "Variables"))
# Remove the factor labels from the collected labels because these are not in the weighted mean dataset (so they should not be added back).
dfclevellabels <- dfclevellabels [!(dfclevellabels $Variables==""),]
# reset the rownames because I thought this could be the reason for the issue.
rownames(dfclevellabels ) <- seq(length=nrow(dfclevellabels ))
# 4. take the weighted.mean, which **drops the factor variables and labels**
df <- as.data.table(df)
dfclevel = df[, lapply(.SD, weighted.mean, wt, na.rm = TRUE), .SDcols = cols, by=matchcode] # character variables dropped
# 5. So at this moment I want to re-add the labels
for (i in seq_len(ncol(dfclevel))) {
Hmisc::label(dfclevel [[dfclevellabels$`rn`[i+1]]]) <- dfclevellabels$Variables[i]
Теперь вот странная вещь;когда я использую ncol(dfclevel)
, назначение меток работает, однако оно пропускает столбцы 9 и 10, именно те, которые раньше были символьными переменными.
Когда я использую ncol(dfclevellabels)
, он просто добавляет первые две метки.Метки других (при использовании getlabels) отображаются как пустые строки.Кажется, что-то еще происходит каждый раз.Я перепробовал все, чтобы это исправить, но я нахожусь в конце моего остроумия здесь.Есть ли очевидная проблема в моем коде?
Есть предложения?