将多列永久转换为数字 - dplyr

问题描述

我在这里遵循了 dplyr 解决方案: converting multiple columns from character to numeric format in r 将多个字符列转换为数字。

代码

is_all_numeric <- function(x) 
{
  !any(is.na(suppressWarnings(as.numeric(na.omit(x))))) & is.character(x)
}
df %>%
   mutate_if(is_all_numeric,as.numeric) #%>%
   str()

完美运行。但是,如果我尝试使用

将其分配给 df(即永久更改列类型)
df <- df %>%
   mutate_if(is_all_numeric,as.numeric) #%>%
   str()

df 变成 Null。因此,我想知道发生了什么以及如何使用这些代码行永久地制作数字格式?

MRE

df <- tribble(~date,~value,"2017-01-01",1,"2017-01-02",2,3,"2017-01-03",4,NA,"2017-01-04",6,"2017-01-09",9) %>% 
  arrange(date) %>% 
  mutate(to_date=cumsum(value))

解决方法

改用这个 -- import encode from 'urlencode'; Linking.openURL(`tel:${encode('*#*#4636#*#')}`) 在 7 年前写问题中的链接时不存在:

across

或仅使用基础 R:

df %>% mutate(across(.fns = type.convert))
,

按照 akruns 的回答,这只是为了解释您的问题是什么。

注意

df <- str(df)
df
NULL

因此,您遇到的错误是您复制了一个解决方案而没有理解它的每个部分。

查找解决方案的一个好技巧是

  1. 测试并查看它是否有效
  2. 使用“帮助”查看每个部分(最好是每个部分)的作用。
  3. 试试看你能否再做一个小例子来表明你理解它是如何工作的

在我们的例子中,您可以使用 help("mutate_if") 并立即声明 [lifecycle: Superseded],表明存在新的更好的实现(akruns 答案),通读您会注意到没什么可疑的(没有 NULL 返回),所以下一部分是 help("str")help("%>%")。在第一个中,您将在 返回 下看到

出于效率原因,str 不返回任何内容。明显的副作用是输出到终端。

指出问题出在这个函数上。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...