R 将0,1列转换为逻辑列的矢量化方法?

R 将0,1列转换为逻辑列的矢量化方法?,r,types,logical-operators,R,Types,Logical Operators,我有一个很大的数据集,被要求对其进行汇总统计。由于默认情况下,R读取0和1为整数的列,因此我希望在运行summary函数之前将它们转换为logical。我的数据集有大量列,其中许多是0/1类型。我找不到一种简单的方法来一次性转换它们,所以我使用了for循环: for (n in 1:ncol(houses)) { if (all(unique(houses[, n]) == c(0, 1)) | all(unique(houses[, n]) == c(0, 1, NA))) hou

我有一个很大的数据集,被要求对其进行汇总统计。由于默认情况下,R读取0和1为整数的列,因此我希望在运行summary函数之前将它们转换为logical。我的数据集有大量列,其中许多是0/1类型。我找不到一种简单的方法来一次性转换它们,所以我使用了for循环:

for (n in 1:ncol(houses)) {
  if (all(unique(houses[, n]) == c(0, 1)) | all(unique(houses[, n]) == c(0, 1, NA)))
    houses[, n] %<>% as.logical
}
这让我相信,一定有更好的方法来做到这一点-我只是不知道它是什么

以下是df的前10行:

       sp transbkc sameagt sqft newhouse age bedrooms baths acre firepl garagesz septic whrlpool occ poorcond
1  366000       NA       0 3400        1   1        4  4.00 1.28      0        3      0        0   0        0
2   99000       NA       0 1900        0   9        3  2.50 1.29      0        2      0        0   0        0
3  240000       NA       0 4000        0   4        4  3.25 1.40      0        2      0        0   1        0
4  112900       NA       0 1830        1   1        4  2.50 1.22      0        2      0        0   0        0
5   45000       NA       0 1250       NA  NA        3  1.00 1.43      0        1      0        0   0        0
6   43000       NA       0 1195       NA  NA        2  1.00 1.21      0        0      0        0   0        0
7  127000       NA       0 2350        1   1        4  2.00 1.50      0        2      0        0   0        0
8  191150       NA       0 2602        1   1        3  2.00 1.63      0        3      0        0   0        0
9  104000       NA       0 2000       NA  NA        4  2.00 1.30      0        2      0        0   0        0
10  55000       NA       0 1600       NA  NA        4  1.75 1.24      0        1      0        0   1        0
   someren suprcond mednage elevationmeter  medincrl pctcollg timetrend distress bedpcttotal   lncdom fld1 fld2
1        0        0    38.3         238.60 1.3916808     54.2       168        0   0.5000000 0.000000    0    0
2        0        1    40.8         178.30 1.1682903     35.7       173        0   0.4285714 5.945421    0    0
3        0        1    47.8         223.69 1.4259059     63.8        48        0   0.4000000 4.795791    0    0
4        0        0    35.3         225.56 1.4160610     54.1       237        0   0.5714286 5.793014    0    0
5        1        0    34.4         212.84 0.4369706     20.2       161        0   0.5000000 5.525453    0    0
6        0        1    30.2         184.95 0.3092624      3.9       251        0   0.5000000 5.730100    1    0
7        0        0    39.9         239.09 1.0349982     29.7        83        0   0.5714286 5.303305    0    0
8        0        0    35.8         264.44 1.8390805     57.3        67        0   0.3750000 6.251904    0    0
9        1        0    40.8         178.52 1.1682903     35.7        14        0   0.4444444 5.493062    0    0
10       0        0    40.0         235.25 0.7435699     28.4        74        0   0.5000000 4.941642    0    0
         ovrpr
1   0.34544754
2   0.01377296
3  -0.13879776
4   0.09606838
5           NA
6           NA
7   0.11856365
8   0.21277618
9           NA
10          NA
您可以尝试使用Lappy:


请包括你的数据样本,以便我们可以更容易地帮助你使用DPT命令的问题,包括ITI会认为这是一个危险的做法。列类型应根据元信息确定…这太棒了,谢谢!我以前从来没有用过变异因子。
       sp transbkc sameagt sqft newhouse age bedrooms baths acre firepl garagesz septic whrlpool occ poorcond
1  366000       NA       0 3400        1   1        4  4.00 1.28      0        3      0        0   0        0
2   99000       NA       0 1900        0   9        3  2.50 1.29      0        2      0        0   0        0
3  240000       NA       0 4000        0   4        4  3.25 1.40      0        2      0        0   1        0
4  112900       NA       0 1830        1   1        4  2.50 1.22      0        2      0        0   0        0
5   45000       NA       0 1250       NA  NA        3  1.00 1.43      0        1      0        0   0        0
6   43000       NA       0 1195       NA  NA        2  1.00 1.21      0        0      0        0   0        0
7  127000       NA       0 2350        1   1        4  2.00 1.50      0        2      0        0   0        0
8  191150       NA       0 2602        1   1        3  2.00 1.63      0        3      0        0   0        0
9  104000       NA       0 2000       NA  NA        4  2.00 1.30      0        2      0        0   0        0
10  55000       NA       0 1600       NA  NA        4  1.75 1.24      0        1      0        0   1        0
   someren suprcond mednage elevationmeter  medincrl pctcollg timetrend distress bedpcttotal   lncdom fld1 fld2
1        0        0    38.3         238.60 1.3916808     54.2       168        0   0.5000000 0.000000    0    0
2        0        1    40.8         178.30 1.1682903     35.7       173        0   0.4285714 5.945421    0    0
3        0        1    47.8         223.69 1.4259059     63.8        48        0   0.4000000 4.795791    0    0
4        0        0    35.3         225.56 1.4160610     54.1       237        0   0.5714286 5.793014    0    0
5        1        0    34.4         212.84 0.4369706     20.2       161        0   0.5000000 5.525453    0    0
6        0        1    30.2         184.95 0.3092624      3.9       251        0   0.5000000 5.730100    1    0
7        0        0    39.9         239.09 1.0349982     29.7        83        0   0.5714286 5.303305    0    0
8        0        0    35.8         264.44 1.8390805     57.3        67        0   0.3750000 6.251904    0    0
9        1        0    40.8         178.52 1.1682903     35.7        14        0   0.4444444 5.493062    0    0
10       0        0    40.0         235.25 0.7435699     28.4        74        0   0.5000000 4.941642    0    0
         ovrpr
1   0.34544754
2   0.01377296
3  -0.13879776
4   0.09606838
5           NA
6           NA
7   0.11856365
8   0.21277618
9           NA
10          NA
houses[] <- lapply(houses, function(x) 
              if(all(x %in% c(0, 1, NA))) as.logical(x) else x)
library(dplyr)
houses %>%  mutate_if(~all(. %in% c(0, 1, NA)), as.logical)