У меня очень большой смешанный набор данных (символьные переменные, числовые переменные, факторы), в котором отрицательные значения часто представляют пропущенные значения, см. Scales
, но не всегда, см. Profit
:
Country Ccode Year Profit Scale ID Happiness_d Power_d ID_d
<chr> <fcr> <dbl> <dbl> <labelled> <dbl> <dbl> <dbl> <dbl>
1 France FR 2000 1000 NA 1 40000. 160000. 1.67
2 France FR 2001 -1200 1 1 80000. 320000. 1.67
3 France FR 2000 1400 0 2 40000. 160000. 1.67
4 France FR 2001 1600 3 2 80000. 320000. 1.67
5 UK UK 2000 -1000 -9 3 40000. 160000. 1.67
6 UK UK 2001 1000 2 3 80000. 320000. 1.67
7 UK UK 2000 1000 4 4 40000. 160000. 1.67
8 UK UK 2001 1000 0 4 80000. 320000. 1.67
Я хотел заменить все отрицательные значения на NA, используя:
df[df< 0] <- NA
Проблема заключается в том, что, хотя он предназначен для удаления отрицательных значений, представляющих NA, например, в Scale
, в примере набора данных он также удалит отрицательные числа в Profit
, которые, очевидно, не являются NA.
В результате я хотел бы сделать результат зависящим от диапазона переменной. Структура переменной Scale
выглядит следующим образом:
Class 'labelled' atomic [1:135894] NA NA 2 NA NA NA NA NA NA NA ...
..- attr(*, "label")= chr "Do You Use Technology Licensed From A Foreign-Owned Company?"
..- attr(*, "format.stata")= chr "%24.0g"
..- attr(*, "labels")= Named num [1:3] -9 1 2
.. ..- attr(*, "names")= chr [1:3] "Don't Know (Spontaneous)" "Yes" "No"
> names(New_Comprehensive_June_25_2018$e6)
Я выяснил, что с haven
библиотекой ссылка вы можете получить уровни факторов из;
..- attr(*, "labels")= Named num [1:3] -9 1 2
с get_values ().
get_values(df$Scale)
[1] -9 1 2
Возможно ли, чтобы решение устраняло только эти отрицательные факторы вместо других отрицательных значений?
..- attr(*, "labels")= Named num [1:3] -9 1 2
Для ясности, желаемый результат будет:
Country Ccode Year Profit Scale ID Happiness_d Power_d ID_d
<chr> <fcr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 France FR 2000 1000 NA 1 40000. 160000. 1.67
2 France FR 2001 -1200 1 1 80000. 320000. 1.67
3 France FR 2000 1400 0 2 40000. 160000. 1.67
4 France FR 2001 1600 3 2 80000. 320000. 1.67
5 UK UK 2000 -1000 **NA** 3 40000. 160000. 1.67
6 UK UK 2001 1000 2 3 80000. 320000. 1.67
7 UK UK 2000 1000 4 4 40000. 160000. 1.67
8 UK UK 2001 1000 0 4 80000. 320000. 1.67
dput пример (обратите внимание, что varable Scale
на самом деле не существует:
h7a = structure(c(1, -9, 2, 3, 1, 3, -9, 2, 3, 1, 2, 1, 3,
3, 2, 2, 1, 2, 2, 1, 2, -9, 1, 4, 3, 3, 1, 1, 1, 1, 3, 4,
3, 1, 2, 2, 1, 2, 1, NA, 2, 1, 2, 4, 3, 1, 3, 4, 4, 3, 2,
4, 1, 1, 2, 3, 2, 2, 2, 2, 1, 2, 1, 3, 4, 3, 1, 3, 1, 2,
3, 3, 3, 1, 1, 4, -9, 4, 3, 1, 2, 3, 1, -9, 1, 4, 1, 3, 1,
-9, 1, 1, 1, 1, 2, 3, 1, 3, 1, 2, 1, 2, 3, 4, 3, 3, 2, 4,
3, 3, 1, -9, 1, -7, 3, 1, 1, 2, 1, 2, -7, 2, 3, 1, 3, -7,
3, 4, 3, 2, 3, NA, 3, 3, 3, 1, 1, 2, 2, -9, 3, 1, 1, 2, 1,
1, -9, -9, -9, 2, -9, 1, 2, 3, 2, 3, 3, 3, 3, 1, 2, -9, 4,
3, 3, 1, 2, 2, 4, 4, 4, 3, 2, 1, 2, 2, 2, 2, 2, 3, 2, 2,
-9, 4, 4, 4, 2, 1, -7, 2, 2, 1, 1, 2, 1, 2, 2, 4, 2, 3, -7,
3, 3, 3, 4, 2, 4, 2, NA, 1, 3, 1, 2, 3, 4, 3, -9, 3, 3, 4,
3, 2, 4, 1, 3, 1, 3, 4, 3, 1, 3, 3, 3, NA, 1, 3, 3, -7, 1,
1, 3, 2, 1, 4), label = "The Court System Is Fair, Impartial And Uncorrupted", format.stata = "%24.0g", class = "labelled", labels = structure(c(NA,
NA, 1, 2, 3, 4), .Names = c("Don't Know (Spontaneous)", "Does Not Apply",
"Strongly disagree", "Tend to disagree", "Tend to agree",
"Strongly agree"))),