gpt4 book ai didi

r - 在管道操作符之后使用 ifelse

转载 作者:行者123 更新时间:2023-12-04 11:35:50 25 4
gpt4 key购买 nike

我希望将两个函数之一应用于向量元素。选择使用哪个函数是基于向量的值。

具体来说:假设所有日期都在 1919 年和 2018 年之间,假设您想将用两位数字编码的年份(如 '07' 表示 '2007' 和 '85' 表示 '1985')转换为四位数字。

因此,您必须将 1900 添加到大于 18 的数字,并将 2000 添加到其他数字。

现在我想用 %>% 运算符来做到这一点(将来能够在 mutate 语句中使用它)。

这个:

c(18,20,21,15) %>% ifelse(.>18, .+1900, .+2000)

产生一个错误:
Error in ifelse(., . > 18, . + 1900, . + 2000) : unused argument (. + 2000)

我什至明白为什么: %>% 强制向量 c(18,20,21,15) 用作 ifelse 的第一个参数。

我有一个使用匿名函数的解决方法:
c(18,20,21,15) %>% (function(x) ifelse(x>18, x+1900, x+2000))
[1] 2018 1920 1921 2015

你能提出什么建议来避免它们(它们 = 匿名函数)?

最佳答案

如果您只添加花括号,您的解决方案就可以正常工作:

c(18,20,21,15) %>% {ifelse(.>18, .+1900, .+2000)}
# [1] 2018 1920 1921 2015

您也可以这样做以避免 {} :
c(18,20,21,15) %>% `+`(1900+100*(.<=18))

或使用 magrittr :
library(magrittr)
c(18,20,21,15) %>% add(1900+100*(.<=18))

保留您的 ifelse :
c(18,20,21,15) %>% add(ifelse(.>18,1900,2000))

关于r - 在管道操作符之后使用 ifelse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49731414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com