【发布时间】:2020-05-26 10:26:14
【问题描述】:
我对 R 很陌生。我正在尝试将一些列聚合到一个新列中。因为只有聚合列必须保存到 DF,所以我使用 transmute。
因为列名可能不同,所以我试图连接一些字符串来制作一段代码,然后使用 parse 和 eval 来处理这段代码。
我整理的部分是:
transmute("aggr1" = as.numeric(val1) + as.numeric(val2), "aggr2" = as.numeric(val3) + as.numeric(val4))
如果我像这样制作一个新的数据框,它会完美运行:
data_aggr <- df %>%
transmute("aggr1" = as.numeric(val1) + as.numeric(val2), "aggr2" = as.numeric(val3) + as.numeric(val4))
但是如果我放在一起的字符串看起来像:
composed = "transmute(\"aggr1\" = as.numeric(val1) + as.numeric(val2), \"aggr2\" = as.numeric(val3) + as.numeric(val4))"
然后我使用:
data_aggr <- df %>%
eval(parse(text=composed))
它不会工作。我得到错误:
error in mutate(.data, !!!dots)
我的解决方案可行吗?我做错了吗?
【问题讨论】:
-
您到底想完成什么?如果您展示实际问题,我们可能会向您展示一种可行的方法。连接字符串来创建代码片段绝对是错误的做法!
-
嗨康拉德,我正在尝试对列进行聚合。用户可以选择 (a) 聚合列的新名称和 (b) 哪些列应该在聚合中。因此,如果 csv 中的用户给出例如 aggr1, val1, val2 那么应该有一个新列 aggr1 它是 val1 的聚合和 val2。因为用户必须能够更改 csv 文件,所以我认为这是要走的路。