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