gpt4 book ai didi

r - 在 DF 中查找 0,1 变量并设置为具有水平顺序的因子

转载 作者:行者123 更新时间:2023-12-04 11:06:56 25 4
gpt4 key购买 nike

我想找到 0,1 个变量并将它们设置为水平阶数为 c(1,0) 的因子。最快的方法是什么。

数据:

ds <- mtcars[,c(2,8:11)]

cyl carb vs am gear
Mazda RX4 6 4 0 1 4
Mazda RX4 Wag 6 4 0 1 4
Datsun 710 4 1 1 1 4
Hornet 4 Drive 6 1 1 0 3
Hornet Sportabout 8 2 0 0 3
...

显然,规则需要应用于vsam。有什么快速又不纠结的方法吗?

规则:因子(., levels = c(1,0))

当前解决方案:

DummyNames <- names(ds)[sapply(ds,function(x){x %>% na.omit %>% unique %in% c(0,1) %>% all})]
ds[,DummyNames] <- lapply(ds[,DummyNames],factor,levels=c(1,0))

最佳答案

这里有一个想法,通过colSum 找到带有c(1, 0) 的列。如果 x == 1 或 x == 0 的 colSum 等于数据框的行数,则意味着所有值都是 0 或 1。您可以在一行中执行此操作,即

ds[colSums(ds == 1 | ds == 0) == nrow(ds)] <- 
lapply(ds[colSums(ds == 1 | ds == 0) == nrow(ds)], factor, levels = c(1, 0))

#or in two lines
#i1 <- colSums(ds == 1 | ds == 0) == nrow(ds)
#ds[i1] <- lapply(ds[i1], factor, levels = c(1, 0))

#str(ds)
#'data.frame': 32 obs. of 5 variables:
# $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
# $ vs : Factor w/ 2 levels "0","1": 1 1 2 2 1 2 1 2 2 2 ...
# $ am : Factor w/ 2 levels "0","1": 2 2 2 1 1 1 1 1 1 1 ...
# $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
# $ carb: num 4 4 1 1 2 1 4 2 2 4 ...

更新:如果您还需要在模式中捕获 NA 值(根据@Benjamin 的评论),那么您应该将其添加到您的 colSums,即

colSums(ds == 1 | ds == 0 | is.na(ds))

关于r - 在 DF 中查找 0,1 变量并设置为具有水平顺序的因子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48988228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com