将数据框转换为1和0

时间:2019-10-09 00:56:19

标签: r dplyr tidyverse

我有这样一个小标题:

a b c d e f
1 1 1 0 0 1
4 5 1 1 0 1
3 1 0 0 0 0 

并将其转换为此(理想情况下是使用tidyverse),以便保留0,而将1和更大的值转换为1:

a b c d e f 
1 1 1 0 0 1
1 1 1 1 0 1
1 1 0 0 0 0 

变量具有不同的名称,从第二列到最后一列。

谢谢!

2 个答案:

答案 0 :(得分:4)

tidyverse方法可能是:

library(dplyr)

df %>%
   mutate_all(~ +(.x > 0))

  a b c d e f
1 1 1 1 0 0 1
2 1 1 1 1 0 1
3 1 1 0 0 0 0

如果要转换除第一列以外的所有内容,可以执行以下操作:

df %>%
  mutate_at(vars(-1), ~ +(.x > 0))

答案 1 :(得分:3)

您可以使用pmin,它将在1和数据框中的值之间选择最小值。

pmin(df, 1)

#  a b c d e f
#1 1 1 1 0 0 1
#2 1 1 1 1 0 1
#3 1 1 0 0 0 0

数据

df <- structure(list(a = c(1L, 4L, 3L), b = c(1L, 5L, 1L), c = c(1L, 
1L, 0L), d = c(0L, 1L, 0L), e = c(0L, 0L, 0L), f = c(1L, 1L, 
0L)), class = "data.frame", row.names = c(NA, -3L))