【发布时间】:2019-10-30 12:04:43
【问题描述】:
对于这个基本问题,我很抱歉。我只是在努力解决应该很简单的事情。假设我有最初具有三个字段的数据框“Test”:Col1、Col2、Col3。
我想根据每个原始列创建新列。新列的每一行中的值将指定原始列上匹配行中的相应值是高于还是低于初始列的中位数。因此,例如,在所附图像中,Col4 基于 Col1。 Col5 基于 Col2。 Col6 基于 Col3。
测试数据框示例:
在单列上执行此功能并输出单列非常容易:
Test <- Test %>% mutate(Col4 = derivedFactor(
"below"= Col1 > median(Test$Col1),
"at"= Col1 == median(Test$Col1),
"above"= Col1 < median(Test$Col1)
.default = NA)
)
但是,如果我在 50 列上执行相同的操作,那么写出/复制粘贴和编辑代码可能会很乏味且效率低下。我应该提到我希望将新列添加到数据框中,而不是创建另一个数据框。此外,数据框中还有大约 200 个其他字段不会对它们执行此功能(所以我不能只使用 mutate_all)。并且列的名称不统一(我上面的示例只是示例,而不是实际的数据集),因此我无法找到 mutate_at 的模式。也许有一种方法可以手动将列名列表传递给 mutate 命令?
必须有一种简单而优雅的方式来做到这一点。如果有人可以提供帮助,那就太棒了。
【问题讨论】:
-
请不要将您的数据发布为图片,而是以易于复制的格式发布。另外,函数 derivedFactor 有什么作用?另见How to make a great R reproducible example 不过:看看
mutate_all