满足条件的子集列

时间:2019-03-21 09:55:26

标签: r dataframe data-science

我的任务:

  • 选择所有行为0或1的列。
  • 将所有这些列的类更改为阶乘(因为它们是二进制的)。

在以下情况下,CA + CC应更改为factorial

CA = c(1,0,1,0,1)
CB = c(1,12,21,0,7)
CC = c(1,0,1,0,1)
mydf = data.frame(CA, CB, CC)
str(mydf)
    'data.frame':   5 obs. of  3 variables:
     $ CA: num  1 0 1 0 1
     $ CB: num  1 12 21 0 7
     $ CC: num  1 0 1 0 1

为什么?因为这些行当前被描述为integernumber而不是factors。而且我认为某些机器学习算法会把它们混在一起。

3 个答案:

答案 0 :(得分:2)

使用baseR的一种方法:

#if all the values in a column are either 0 or 1 convert to factor
mydf[] <- lapply(mydf, function(x) {
  if(all(x %in% 0:1)) {
    as.factor(x)
  } else {
    x
  }
})

出局:

str(mydf)
#'data.frame':  5 obs. of  3 variables:
# $ CA: Factor w/ 2 levels "0","1": 2 1 2 1 2
# $ CB: num  1 12 21 0 7
# $ CC: Factor w/ 2 levels "0","1": 2 1 2 1 2**

答案 1 :(得分:2)

使用dplyr的{​​{3}}

的另一种方法
library(dplyr) 
is_one_zero <- function(x) {

  res <- all(unique(x) %in% c(1, 0))

  return(res)
}

out <- mydf %>% 
  mutate_if(is_one_zero, as.factor) 

str(out)
#'data.frame':  5 obs. of  3 variables:
# $ CA: Factor w/ 2 levels "0","1": 2 1 2 1 2
# $ CB: num  1 12 21 0 7
# $ CC: Factor w/ 2 levels "0","1": 2 1 2 1 2

答案 2 :(得分:2)

另一种在基数R中实现的方法

<input type="text" ng-model="passport" ng-change="evalatePassport()" id="passport />