R:数据帧列表上的嵌套if-else语句

R:数据帧列表上的嵌套if-else语句,r,for-loop,dataframe,lapply,R,For Loop,Dataframe,Lapply,我有一个数据帧列表,所有数据帧都具有相同的结构。我需要根据另一个变量的值在每个数据帧中重新编码一个变量。我在这里找到了一些解决方案,这些解决方案让我很接近,但几个小时后,我仍然做不到 我的数据帧如下所示: $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

我有一个数据帧列表,所有数据帧都具有相同的结构。我需要根据另一个变量的值在每个数据帧中重新编码一个变量。我在这里找到了一些解决方案,这些解决方案让我很接近,但几个小时后,我仍然做不到

我的数据帧如下所示:

$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
$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
每个类代码都属于一个更大的MajorClass类别。我正在尝试附加另一个MajorClass,以便将数据转换成简单的英语。比如说:

$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
$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
我的想法是尝试使用
lappy
代替for循环来获取每一行的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 ...
>MajorClass i$MajorClass如果(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=='216'|==
>“234”| i$Class==“278”| i$Class==“295”)
>我还想要一个MajorClass
>如果(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您试图做的是将一个表中的值匹配到另一个表中,这可以通过
join
轻松完成。这将通过一个公共列(名称相同)匹配两个表的元素

为此,您需要一个参考表,其中每个不同的
都有其关联的
主要类
。(我生成了一些虚拟数据)

或者将列表中的所有数据帧折叠为一个(如果它们具有相同的结构,则可以这样做),然后立即匹配所有表

data <- bind_rows(test)
output <- left_join(data, reference_table, by="class")

  class total MajorClass
  (chr) (dbl)      (chr)
1   201     1        Reg
2   203     3     NonReg
3   205     7  comercial

data我假设您有一个Vicent Boned描述的参考表。您可以使用base R来完成这项工作

test$MajorClass <- factor(test$class, levels=reference_table$class, labels=reference_table$MajorClass)

test$MajorClass或不使用
dplyr
(但仍然假设有一个参考表),当然,您可以简单地执行
test$MajorClass!如果我使用SQL,我会这样想。我想得太多了。真的很感激文森特。@antoine sac,我很少使用
因子,也从来没有想过这样使用它们!谢谢