【发布时间】:2019-10-09 00:56:19
【问题描述】:
我有一个像这样的大标题:
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
变量有不同的名称,从第二列到最后一列。
谢谢!
【问题讨论】:
我有一个像这样的大标题:
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
变量有不同的名称,从第二列到最后一列。
谢谢!
【问题讨论】:
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))
【讨论】:
mutate_all, +(df > 0)
您可以使用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))
【讨论】:
set.seed(1); df <- data.frame(matrix(sample(0:5,10,replace=TRUE),nrow=5))
df[] <- lapply(df, pmin, 1) 确实按预期工作。
NAs,这很奇怪。转换为矩阵工作 pmin(as.matrix(df), 1) 但为什么 pmin(df, 1) 不能直接工作?特别是当帖子中的df 也是数据框时。
mean(df) 这样的函数不再像那样工作了。将pmin 与任何不是向量的东西一起使用时,似乎会有一些时髦的转换。这似乎可能值得进行错误讨论。至少可以指定更好的警告消息。