我正在尝试使用case_when执行一个dplyr::mutate()来在由字符串片段组装而成的各种公式之间进行选择。然而,我显然没有在引用和取消引用之前将字符串正确地转换成表达式。我已经尝试了七八种这样做的方法,都不成功。
从字符串组合表达式的原因是,我有大量变量组,其名称仅由后缀不同,例如,用于区分名义或通货膨胀调整后的美元中的变量。我使用case_when,因为相似的变量在不同的年份具有不同的名称,有时具有不同的聚合结构。
这是一个非常简单的例子:
bus_inc <- function(tb, suffix) {
bus1 <- quo(paste0("incbus", suffix, " + ", "incfarm", suffix, collapse = ""))
bus2 <- quo(paste0("incbus2", suffix, " + ", "incfarm", suffix, collapse = ""))
bus3 <- quo(paste0("incbus", suffix, " + ", "incfarm2", suffix, collapse = ""))
out <- mutate(tb, bus = case_when((year < 1968) ~ UQ(bus1),
((year > 1967) & (year < 1976)) ~ UQ(bus2),
(year > 1975) ~ UQ(bus3)))
out
}
数据:
incbus_99 <- 1:56
incfarm_99 <- 57:112
incbus2_99 <- incbus_99 + 0.5
incfarm2_99 <- incfarm_99 * 10
year <- 1962:2017
test_tb <- tibble(year, incbus_99, incfarm_99, incbus2_99, incfarm2_99)
my_test <- bus_inc(tb = test_tb, suffix = "_99")
my_test
< code>bus的值在1962年应为58,在1968年应为70.5。
我发现许多地方建议将解析(text=“my_string”)作为将字符串转换为表达式的一种方法,例如Martin Maechler的早期示例(2002)。但我也发现了很多地方说永远不要这样做,比如《财富》106和马丁·梅切勒最近的例子。我认为令人敬畏的梅奇勒博士对他提出的一个解决方案的有力否定,他提供了有力的证据,证明这不是一个好主意,但我不理解他提出的替代方案,因为它们似乎对字符串进行了评估。
可能使用sym()
和expr()
的组合(您还需要将用作.numeric
,因为不一致的类型将在case_when
>中抛出错误)。。。
bus_inc <- function(tb, suffix) {
bus1 <- expr(!!sym(paste0('incbus', suffix)) + !!sym(paste0('incfarm', suffix)))
bus2 <- expr(!!sym(paste0('incbus2', suffix)) + !!sym(paste0('incfarm', suffix)))
bus3 <- expr(!!sym(paste0('incbus', suffix)) + !!sym(paste0('incfarm2', suffix)))
mutate(tb, bus = case_when(year < 1968 ~ as.numeric(!!bus1),
year > 1967 & year < 1976 ~ as.numeric(!!bus2),
year > 1975 ~ as.numeric(!!bus3)))
}
library(dplyr)
incbus_99 <- 1:56
incfarm_99 <- 57:112
incbus2_99 <- incbus_99 + 0.5
incfarm2_99 <- incfarm_99 * 10
year <- 1962:2017
test_tb <- tibble(year, incbus_99, incfarm_99, incbus2_99, incfarm2_99)
bus_inc(tb = test_tb, suffix = "_99")
# # A tibble: 56 x 6
# year incbus_99 incfarm_99 incbus2_99 incfarm2_99 bus
# <int> <int> <int> <dbl> <dbl> <dbl>
# 1 1962 1 57 1.5 570 58
# 2 1963 2 58 2.5 580 60
# 3 1964 3 59 3.5 590 62
# 4 1965 4 60 4.5 600 64
# 5 1966 5 61 5.5 610 66
# 6 1967 6 62 6.5 620 68
# 7 1968 7 63 7.5 630 70.5
# 8 1969 8 64 8.5 640 72.5
# 9 1970 9 65 9.5 650 74.5
# 10 1971 10 66 10.5 660 76.5
# # ... with 46 more rows
我有一个像这样的数据框 由reprex包(v2.0.1)于2022-02-17创建 我想group_by col1,当count_col2 当count_col1 我希望我的数据看起来像这样 我不确定这是否可以通过变异(case_when…)来实现。到目前为止,我失败了
我有一个带有键值对的数组,数组列是id和name。我想按ID对这个数组进行排序。 id列值的类型是字符串类型,但我想将它们排序为数字值,也应该在IE上工作 尽管顺序确实发生了变化,但它并没有像预期的那样发生变化,在IE中也会抛出一个错误。
问题: 我想简化以下数据框 我希望能够将农民总结为一个单独的逗号,并将吨与观察结果相加,使其看起来像以下内容 我想谈以下几点 我所尝试的: 我尝试过使用dplyr函数组,并在下面对每个函数进行总结 然而,我不确定如何集成求和数值,而不使用摘要函数专门调用每一列, 感谢您的帮助。
问题内容: 我是Java的新手,我不太确定如何将整数加幂作为字符串输出。我知道 实际上会计算出将双精度数提高到幂的值。但是,如果我想输出“ 2 ^ 6”作为输出(除了6作为上标而不是克拉),我该怎么做? 编辑:这是一个Android应用程序。我以整数形式传递给幂的整数,我想知道如何在手机的UI中将其转换为上标。 问题答案: 如果要将文本输出到GUI,则可以使用HTML格式和标记获取上标。否则,您将
我用mtcars数据集来说明我的问题。 例如,我想将数据子集到4-cyl汽车。我可以做到: 在我的工作中,我需要传递一个字符串变量作为我的列名。例如: 我也做了: 在这两种情况下,我都得到空数据帧。
QueryDsl 3.3.4 Hibernate 3.6.10-Final I有两个实体: org.hibernate.hql.ast.tree.SelectClause.InitializeExplicitSelectClause(SelectClause.java:156)