我有这样一个小标题:
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
变量具有不同的名称,从第二列到最后一列。
谢谢!
答案 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))