【发布时间】:2021-12-27 02:12:29
【问题描述】:
我有一个需要附加到现有表的单行数据框。事实上,许多数据帧值都是布尔值,但我需要将它们转换为字符串(“-1”表示 TRUE,“0”表示 FALSE)以匹配现有表。由于数据框包含 100 个这样的列,我想避免输入每个单独的列。我尝试过使用 which(TRUE) 和 isTRUE(),但如果它们适用于我的情况,我不确定将什么用作函数参数,或者如何将它们放入数据框中。
我想应该是这样的:
df <- data.frame(a = T, b = F, c = F, d = T, e = T, f = T, g = F, h = F)
df2 <- df[, {find all values that are true}]${all those columns} <- '-1'
df3 <- df2[, {find all values that are false}]${all those columns} <- '0'
## df3 should match this:
df3 <- data.frame(a = '-1', b = '0', c = '0', d = '-1', e = '-1', f = '0', g = '0', h = '0')
我在 dplyr 文档、本网站和谷歌搜索中进行了相当彻底的搜索,发现了很多类似的问题,但没有一个完全符合我的情况。谢谢!
【问题讨论】:
-
您在寻找类似
df[df == TRUE] <- -1和df[df == FALSE] <- 0的东西吗? -
我在某个地方看到过,我试过了,但是当我这样做时,它会将整个数据帧重新分配为单个逻辑值。我不知道我做错了什么?
-
实际上,@MartinGal,我刚刚意识到我在做 df
-
看看@blob 的回答。
dplyr的across函数对于此类任务来说是一个非常强大的工具。 -
df[1,] * -1可能更简单...