当前位置: 首页 > 知识库问答 >
问题:

transmute_at多个参数使用case_when(grepl())指定列号

云新知
2023-03-14

我一直在寻找解决这个问题的办法,但运气不佳。我有一个鱼类的数据框架,我需要对27列数据应用dplyr窗口函数(< code > transduce _ at )。数据帧子集:

df <- data.frame(
  Otherspp = c("suck SD", "BT", "SD RS", "RSS"),
  Dominantspp = c("OM", "OM", "RS", "CH"),
  Commonspp = c(" ", " ", " ", "OM"),
  Rarespp = c(" ", " ", "SD", "NP"),
  NP = rep("northern pikeminnow|NORTHERN PIKEMINNOW|np|NP|npm|NPM", 4),
  OM = rep("steelhead|STEELHEAD|rainbow trout|RAINBOW TROUT|st|ST|rb|RB|om|OM", 4),
  suck = rep("suckers|SUCKERS|sucker|SUCKER|suck|SUCK|su|SU", 4)
)

我需要使用填充了常见鱼代码/名称(NPOMsuck)的列来计算前四列中的表达式,并根据每列输出不同的数字(如果表达式满足)。到目前为止,我只能弄清楚如何让它运行一列。如何为transmute_at中为新列转换将创建和用于计算每个表达式的列编制索引。

这适用于一个列:

df <- subset(df[, c(1:4, 6)]) # using column OM for best example

df %>%
  rowwise() %>%
  transmute(OM = case_when(
    grepl(OM, Dominantspp) ~ "5",
    grepl(OM, Commonspp) ~ "3",
    grepl(OM, Rarespp) ~ "1",
    grepl(OM, Otherspp) ~ "1",
    TRUE ~ "0"
  )
)

提前感谢!

共有1个答案

佘京
2023-03-14

如果我正确理解了你的问题,这里是你可以做的。transmute类似于Mutate。不同的是transmute删除其他变量。transmute_attransmute的变体,它有三个参数。第一个参数是tbl数据帧。第二个参数,. vars,是选择列的地方。我们可以使用vars(...)来指定列,其中...可以使用与dplyr相同的方法::选择。第三个参数. funs是指定要应用于所有选定列的函数的位置。我们将操作indisefuns(...)

library(dplyr)

df %>%
  rowwise() %>%
  transmute_at(vars(NP, OM, suck), 
               funs(Recode = case_when(
                 grepl(., Dominantspp) ~ "5",
                 grepl(., Commonspp) ~ "3",
                 grepl(., Rarespp) ~ "1",
                 grepl(., Otherspp) ~ "1",
                 TRUE ~ "0"))) %>%
  ungroup()
# # A tibble: 4 x 3
#   NP_Recode OM_Recode suck_Recode
#       <chr>     <chr>       <chr>
# 1         0         5           1
# 2         0         5           0
# 3         0         0           0
# 4         1         3           0

或者像这样,在原始列名之后没有任何标签。

df %>%
  rowwise() %>%
  transmute_at(vars(NP, OM, suck), 
               funs(case_when(
                 grepl(., Dominantspp) ~ "5",
                 grepl(., Commonspp) ~ "3",
                 grepl(., Rarespp) ~ "1",
                 grepl(., Otherspp) ~ "1",
                 TRUE ~ "0"))) %>%
  ungroup()
# # A tibble: 4 x 3
#      NP    OM  suck
#   <chr> <chr> <chr>
# 1     0     5     1
# 2     0     5     0
# 3     0     0     0
# 4     1     3     0
 类似资料:
  • 我有一个很大的数据集,其中有许多带有状态的列。我想做一个新的专栏,有参与者的当前状态。我试图在dplyr中使用case_when,但我不确定如何跨列。数据集的列太多,我无法键入每一列。以下是数据示例: 对于代码,我想要一个新的列,列中说明参与者的最终状态;然而,如果他们的状态曾经是完成的,那么我希望它说完成,不管他们的最终状态是什么。对于该数据,答案如下所示: 还有,如果你能包括对你的代码的任何解

  • 这段代码 产生如下数据帧: 我想看到的结果是这个数据框: 因为对于行C有两个条件为真,所以我希望为它们中的每一个创建一行。我怎样才能做到这一点?

  • 数据文件:-已编辑- 我正在使用ANES 2016时间序列研究数据。使用以下代码和类别对缺失数据进行编码,以表明其缺失的原因: -1.不适用 -2.在单独文件或编码版本中提供的文本响应将包含在未来版本中 3.受限 4.错误 5.中断,足够的部分信息 6.没有选举后采访 7.没有帖子数据,由于信息不完整而删除 8.不知道 9.拒绝 我想在我的数据中使用case_when和Tidyverse对面的NA

  • 问题内容: 我在将控制器中定义的函数与指令中的回调函数绑定时遇到一些麻烦。我的代码如下所示: 在我的控制器中: 然后我的指令: 在我的html页面中: 上面的代码没有运气。根据我在各种教程中所读的内容,我知道我应该在HTML页面中指定参数? 问题答案: 您的代码中有一个小错误,请尝试以下代码,它应该对您有用

  • 问题内容: 我正在尝试为我的数据库实现一个非常基本的搜索引擎,其中用户可能包含各种信息。搜索本身包含几个联合选择,其中结果总是合并为3列。 但是,返回的数据是从不同的表中获取的。 每个查询都使用$ term进行匹配,并将其绑定到“:term”作为预备参数。 现在,该手册说: 调用PDOStatement :: execute()时,对于要传递给语句的每个值,必须包含一个唯一的参数标记。您不能在准备

  • 问题内容: 我有一个C#/ Selenium / Specflow测试套件,正在使用xunit.console.exe使用Jenkins运行。我需要将这些测试指向不同的环境(Test / QA / Prod等),并想使用命令行参数。 我正在调用的批处理命令是: 并希望包含一个额外的参数,例如: “ -env = PROD”, 以将该作业指向特定的环境。 我愿意采取更好的方法。 问题答案: 对于此解