У меня есть список фреймов данных, имеющих ту же структуру. Мне нужно перекодировать переменную в каждом кадре данных на основе значения другой переменной. Я нашел здесь решения, которые подтолкнули меня, но через много часов я все еще отстаю.R: Вложенные инструкции if else в список фреймов данных
Мои кадры данных выглядит следующим образом:
код$Test14
Class Total
1 201 1
2 203 14
3 204 3
4 205 7
5 206 7
6 207 1
7 211 2
8 212 1
9 213 16
10 288 27
11 299 9
12 517 1
13 592 2
14 593 8
Каждый класс попадает в более широкую категорию MajorClass. Я пытаюсь присоединить еще один те MajorClass, чтобы я мог использовать данные на простом английском языке. Так что-то вроде этого:
$Test14
Class Total MajorClass
1 201 1 Reg Residential
2 203 14 Reg Residential
3 204 3 Reg Residential
4 205 7 Reg Residential
5 206 7 Reg Residential
6 207 1 Reg Residential
7 211 2 Reg Residential
8 212 1 Reg Residential
9 213 16 NonReg Residential
10 288 27 NonReg Residential
11 299 9 NonReg Residential
12 517 1 Commercial
13 592 2 Commercial
14 593 8 Industrial
Моя мысль была, чтобы попытаться использовать lapply
вместо для цикла, чтобы получить MajorClass для каждой строки, а затем использовать cbind
, чтобы вытащить все это вместе позже. Закрытие я пришел, используя следующий код:
> MajorClass <- lapply(mydata, function(i) {
> i$MajorClass <- ""
> if (i$Class == '200' || i$Class == '202' || i$Class == '203' || i$Class == '204' || i$Class == '205' || i$Class == '206' || i$Class ==
> '207' || i$Class == '208' || i$Class == '209' || i$Class == '210' ||
> i$Class == '211' || i$Class == '212' || i$Class == '216' || i$Class ==
> '234' || i$Class == '278' || i$Class == '295')
> i$MajorClass <- "Reg Residential"
> else
> if (i$Class == '239' || i$Class == '240' || i$Class == '241' || i$Class == '201' || i$Class == '213' || i$Class == '224' || i$Class
> == '225' || i$Class == '236' || i$Class == '288' || i$Class == '290' || i$Class == '297' || i$Class == '299')
> i$MajorClass <- "NonReg Residential" ... and so on ...
Но он возвращает только одно значение для последней записи в каждом кадре данных. Я пробовал несколько вариантов этого, и попытался использовать цикл for, все безрезультатно. Кроме того, мое (ограниченное) понимание заключается в том, что более эффективно использовать функции apply вместо циклов.
Любая помощь или указатель в правильном направлении были бы очень признательны. Как я уже сказал, я много искал на этом сайте и других и подошел близко, но не достаточно близко. Еще раз спасибо!
Или без использования 'dplyr' (но при условии, справочную таблицу), вы можете просто сделать' тест $ MajorClass <- коэффициент (тест $ класс, уровень = reference_table $ класс, наклейки = reference_table $ MajorClass) ' , Всегда хорошо иметь альтернативу в базе R. –
Конечно! Вот как я бы это описал, если бы я использовал SQL. Я уже думал об этом. Очень ценю это Винсент. –
@ antoine-sac, я редко использую «факторы» и никогда не думал использовать их таким образом! Благодаря! –