Создание условных столбцов в R - PullRequest
0 голосов
/ 03 сентября 2011

Я должен создать два столбца (OPop и WPop) в следующем фрейме данных Data:

OState  OCounty WState  WCounty OYear
AL  Autauga AL  Baldwin 2004
AL  Barbour AL  Bibb    2001
CA  Amador  WY  Weston  1985
CA  Alameda CA  Amador  1999

Значения OPop и WPop основаны назначения четырех столбцов (Pop1980, Pop1990, Pop2000 и Pop2010) другого фрейма данных Data1

State   County  Pop1980 Pop1990 Pop2000 Pop2010
AL  Autauga 32259   34222   43671   54571
AL  Baldwin 78556   98280   140415  182265
AK  Aleutians East  7768    2464    2697    3141
AK  Aleutians West  NA  9478    5465    5561
CA  Alameda 1105379 1279182 1443741 1510271
CA  Alpine  1097    1113    1208    1175
CA  Amador  19314   30039   35100   38091
CA  Butte   143851  182120  203171  220000
WY  Uinta   13021   18705   19742   21118
WY  Washakie    9496    8388    8289    8533
WY  Weston  7106    6518    6644    7208



Data$OPop <- ifelse(test = Data$OState == Data1$State & Data$OCounty == Data1$County &
                       Data$OYear >= 1980 & Data$OYear < 1990,
                yes = Data1$Pop1980,
                no = ifelse(test = Data$OState == Data1$State & Data$OCounty == Data1$County &
                                   Data$OYear >= 1990 & Data$OYear < 2000,
                             yes = Data1$Pop1990,
                             no = ifelse(test = Data$OState == Data1$State & Data$OCounty == Data1$County &
                                                Data$OYear >= 2000 & Data$OYear < 2010,
                                         yes = Data1$Pop2000,
                                         no = ifelse(test = Data$OState == Data1$State & Data$OCounty == Data1$County &
                                                            Data$OYear >= 2010 & Data$OYear < 2011,
                                                     yes = Data1$Pop2010,
                                                     no = NA))))

Любая помощь будет принята с благодарностью.Спасибо

РЕДАКТИРОВАТЬ

Я получил следующее сообщение об ошибке:

Error in Ops.factor(Data$OState, Data1$State) : 
  level sets of factors are different
In addition: Warning message:
In is.na(e1) | is.na(e2) :
  longer object length is not a multiple of shorter object length

1 Ответ

5 голосов
/ 03 сентября 2011

Я собираюсь показать вам, что может сделать слияние. Если это не то, что вы хотели, то ПОЛЬЗУЙТЕСЬ ЕСТЕСТВЕННЫМ ЯЗЫКОМ, а не запутанным кодом), чтобы объяснить, что вы хотите. «O» и «W» не являются достаточными подсказками для определения вашей цели. Предположим, это два data.frames: «dat1», «dat2» (из которого вы удалили лишнюю строку и строку с недостаточной длиной:

    >  merge(dat2, dat1, 1:2)
  State  County Pop1980 Pop1990 Pop2000 Pop2010 WState WCounty OYear
1    AL Autauga   32259   34222   43671   54571     AL Baldwin  2004
2    CA Alameda 1105379 1279182 1443741 1510271     CA  Amador  1999
3    CA  Amador   19314   30039   35100   38091     WY  Weston  1985
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...