Próbuję przygotować moich zmiennych, aby korzystać z danych w analizie regresji. Otrzymuję błąd, gdy utworzę następującą tabelę danych. Muszę przygotować dane do wyświetlania liczby razy członek uczestniczy w debacie (N_EDU) rocznie i obejmuje inne istotne zmienne obok. Wszystkie zmienne zdają się być w porządku, z wyjątkiem jednego dnia_in_house. Oto mój kod.

library(data.table)

df1 <- data.table(df1)

mp_by_year <- df1[,list(n_parent_Edu = sum(parent_Edu), isFemale = unique(isFemale), party = unique(party), days_in_house = unique(days_in_house)), by = list(member_id, year)]

Kiedy uruchamiam ten kod bez zmiennej Day_in_House (tj. Tylko z Isfemale, Parent_edu, Mest_ID, Roczne zmienne), działa dobrze i produkuje nową ramę danych. Jednak kiedy dodam tę zmienną, daje mi poniższy błąd. Zmienna wygląda tak:

days_in_house
1647
6383
463
3528
462
3639
16
1738
16
187
3732

...i tak dalej. Otrzymuję następujący błąd, gdy dodam w tej zmiennej do tabeli danych:

"Dostarczane 2 elementy do kolumny 3 grupy 242, która ma 5 wierszy. Długość RHS musi być albo 1 (pojedyncze wartości są OK) lub dopasuj dokładnie długość LHS. Jeśli chcesz" recykling "RHS, użyj REP () wyraźnie Aby ten zamiar był jasny do czytelników swojego kodu. "

Moje inne zmienne pojawiają się w następujący sposób:

Isfemale.

0
1
0
0
0
0
1

Przyjęcie

Conervative
Labour
Liberal Democrats
Conservative
Conervative
Labour

Członkostwo_id.

463
283
352
287
27
372

Rok

1997
1997
1997
1997
1997
0
Amy 18 lipiec 2020, 18:50

1 odpowiedź

Najlepsza odpowiedź

Problem polega na tym, że unique może zwrócić zmienną liczbę wyników. Dla niektórych twoich dziedzin wynik ma 5 wierszy, podczas gdy inne pola mogą być inne. Oto prosty reprex dla błędu:

library(data.table)

dt = data.table(grp = 1L,
           party = c("A", "A", "B"),
           days = 1:3,
           val = rnorm(3L))

dt
#>      grp  party  days       val
#>    <int> <char> <int>     <num>
#> 1:     1      A     1 -0.946899
#> 2:     1      A     2 -2.094639
#> 3:     1      B     3  1.033007

dt[ ,
   .(sum(val), unique(party), unique(days)),
   by = grp
   ]
#> Error in `[.data.table`(dt, , .(sum(val), unique(party), unique(days)), : Supplied 2 items for column 2 of group 1 which has 3 rows. The RHS length must either be 1 (single values are ok) or match the LHS length exactly. If you wish to 'recycle' the RHS please use rep() explicitly to make this intent clear to readers of your code.

Problem polegał na tym, że unique(party) wyniki w 2 rekordy, podczas gdy grp ma 3 rekordy. Brzmi to jak to, co właściwie chcesz zrobić, to grupa o więcej przedmiotów, aby pokazać wszystko, co jest wyjątkowe:

dt[,
   .(sum(val)),
   by = .(grp, party, days)]
#>      grp  party  days          V1
#>    <int> <char> <int>       <num>
#> 1:     1      A     1  0.87004621
#> 2:     1      A     2 -2.36972622
#> 3:     1      B     3  0.05793804

Dla twojego zestawu danych użyjesz:

df1[ , 
    .(n_parent_Edu = sum(parent_Edu)), 
    by = .(member_id, year, isFemale, party, days_in_house)]

W przyszłych pytaniach miło jest uprościć zbiór zestawu danych, ponieważ zrobiłem powyżej. Lub, najgorszy przypadek, możesz użyć dput(head(df1, 10L)) lub zmodyfikować zestaw danych w celu odtworzenia problemu.

2
Cole 18 lipiec 2020, 17:09