【发布时间】:2015-12-16 03:40:16
【问题描述】:
我有一个数据框列表,它们都具有相同的结构。我需要根据另一个变量的值在每个数据帧中重新编码一个变量。我在这里找到了让我很接近的解决方案,但经过几个小时后,我仍然不够努力。
我的数据框如下所示:
$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
每个 Class 代码都属于一个更大的 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 代替 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 ...
但它只为每个数据帧中的最后一条记录返回一个值。我对此尝试了多种变体,并尝试使用 for 循环,但均无济于事。另外,我的(有限的)理解是使用 apply 函数而不是 for 循环更有效。
任何帮助或指出正确的方向将不胜感激。正如我所说,我在这个网站和其他网站上进行了很多搜索,结果很接近但还不够接近。再次感谢!
【问题讨论】:
标签: r for-loop dataframe lapply