在 R 中删除多个变量中的字符串

如何解决在 R 中删除多个变量中的字符串

这是我的数据的 MWE,我想从中删除包含“Med”的所有列中的字符串“NaN”

df= data.frame(id= rep(1:5,each=1),Med1 = c("GN","GN","Ca","DM"),Med2 = c("DM","NaN","Mob","NaN"),Med3 = c("NaN","DM","NaN"))

我尝试了以下方法

dfx = df%>%
  mutate(across(contains("Med",ignore.case = TRUE),str_remove(.,"NaN")))
Error: Problem with `mutate()` input `..1`.
x Problem with `across()` input `.fns`.
i Input `.fns` must be NULL,a function,a formula,or a list of functions/formulas.
i Input `..1` is `(function (.cols = everything(),.fns = NULL,...,.names = NULL) ...`.
Run `rlang::last_error()` to see where the error occurred.
In addition: Warning message:
Problem with `mutate()` input `..1`.
i argument is not an atomic vector; coercing
i Input `..1` is `(function (.cols = everything(),.names = NULL) ...`. 
dfx = df%>%
  mutate(across(contains("Med",str_remove("NaN")))
Error: Problem with `mutate()` input `..1`.
x argument "pattern" is missing,with no default
i Input `..1` is `(function (.cols = everything(),.names = NULL) ...`.

我也有从单列中删除字符串的问题,所以我想我可能误解了 str_remove

dfy=df%>%
 str_remove(string = Med1,pattern = "NaN")
Error in str_remove(.,string = Med1,pattern = "NaN") : 
  unused argument (.)

解决方法

预先:在代码中添加波浪号:

dfx = df%>%                                        #,--- add this tilde
  mutate(across(contains("Med",ignore.case = TRUE),~ str_remove(.,"NaN")))

说明:across 将函数作为第二个参数。这可以通过以下几种方式表达:

  1. 原始函数,例如across(everything(),mean)。之后您可以添加任意命名/未命名参数,但它们与数据本身是分开的。

    mtcars %>%
      mutate(across(everything(),mean))
    mtcars %>%
      mutate(across(everything(),mean,na.rm = TRUE))
    

    (这不假设 base-R 函数:您可以在其他地方创建自己的函数并在此处传递。)

  2. 匿名函数,允许更灵活的调用。也许:

    mtcars %>%
      mutate(across(everything(),function(z) mean(x)))
    mtcars %>%
      mutate(across(everything(),function(z) mean(x,na.rm = TRUE)))
    
  3. rlang 样式的波浪号函数。在这些中,. 被数据向量替换(对于每列是 mutated):

    mtcars %>%
      mutate(across(everything(),~ mean(.)))
    mtcars %>%
      mutate(across(everything(),~ mean(.,na.rm = TRUE)))
    

当然,您不需要 stringr 来执行这个任务。

df
#   id Med1 Med2 Med3
# 1  1   GN   DM  NaN
# 2  2   GN  NaN  NaN
# 3  3   Ca  Mob   DM
# 4  4   Ca  NaN  NaN
# 5  5   DM  NaN  NaN
df[df == "NaN"] <- ""
df
#   id Med1 Med2 Med3
# 1  1   GN   DM     
# 2  2   GN          
# 3  3   Ca  Mob   DM
# 4  4   Ca          
# 5  5   DM          

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?