r - 如何根据 R 中的多个条件正确定义新列
问题描述
我的 R 代码存在以下问题(我已经通过 12 个嵌套的 if else 语句修复了该问题,这是迄今为止不可取的)。由于我无法分享完整的代码和数据,我也遇到了类似的问题。假设我的数据集中有以下列,即频率
> test_df
ID Frequency
1 1 1
2 2 56
3 3 34
4 4 22
5 5 9
6 6 8
7 7 50
8 8 7
现在,我想改变一个基于表格的新列,它对频率进行分类,即
htbl
freq_interval category
1 6 A
2 18 B
3 20 C
4 30 D
5 40 E
现在,我想根据该表改变一个新列,方法如下:如果频率小于 6,则为新列赋予值“A”。如果频率小于 18 但大于 6,则为新列指定值“B”。如果频率小于 20 但大于 18,则给它值“C”,依此类推。所以,我想要的新 test_df 将是:
ID Frequency mutated_column
1 1 1 A
2 2 56 <NA>
3 3 34 E
4 4 22 D
5 5 9 B
6 6 8 B
7 7 50 <NA>
8 8 7 B
我怎样才能干净地做到这一点?
提前致谢
解决方案
我们可以使用findInterval
或cut
在这里
test_df$mutated_column <- htbl$category[findInterval(test_df$Frequency,
htbl$freq_interval) + 1]
test_df
# ID Frequency mutated_column
#1 1 1 A
#2 2 56 <NA>
#3 3 34 E
#4 4 22 D
#5 5 9 B
#6 6 8 B
#7 7 50 <NA>
#8 8 7 B
cut
这样就可以了
cut(test_df$Frequency, breaks = c(-Inf, htbl$freq_interval),labels = htbl$category)
#[1] A <NA> E D B B <NA> B
#Levels: A B C D E
推荐阅读
- django - 带有自定义用户模型加载夹具错误的 Django 项目
- django - Python 3.7 / Django 2.2.1:保存前检查字段
- express - 具有一个 API(路由)的 Express 应用程序,该 API(路由)将 fullName 作为查询参数并将其拆分为 firstName 和 lastName 作为输出
- aframe - 如何正确地用 10 制作游泳池
s A 型架 - javascript - 看来我的 JSX 代码生成单元(HTML td 元素)有一些问题
- unity3d - 使网格部分半透明并且仍然接收正确的阴影
- r - R引导数据框中的所有列
- excel - 在excel中将csv文件转换为制表符分隔的文本文件时输出不同的字符串
- java - jpa中如何调用表函数
- python-3.x - 在 python 中绑定 Teradata 查询不返回任何内容