如何基于其他数据帧中的信息减去R个数据帧列?

MVincent

我有一个数据框,我想向其中添加新列,但其中的计算取决于包含指令的另一个数据框中的值。

我在下面创建了一个可重现的示例(尽管实际上还有很多列),

输入数据框:

base <- data.frame("A"=c("orange","apple","banana"),
                   "B"=c(5,3,6),
                   "C"=c(7,12,4),
                   "D"=c(5,2,7),
                   "E"=c(1,18,4))
key <- data.frame("cols"=c("A","B","C","D","E"),
                  "include"=c("no","no","yes","no","yes"),
                  "subtract"=c("na","A","B","C","D"),
                  "names"=c("na","G","H","I","J"))

所需的输出数据帧:

output <- data.frame("A"=c("orange","apple","banana"),
                     "B"=c(5,3,6),
                     "C"=c(7,12,4),
                     "D"=c(5,2,7),
                     "E"=c(1,18,4),
                     "H"=c(2,9,-2),
                     "J"=c(-4,16,-3))

键数据帧在基础数据帧的每一列都有一行,而“ include”列必须设置为“ yes”才能进行任何计算。如果将其设置为yes,那么我想添加一个新列,该列的定义名称减去给定列。

例如,基本数据框中的“ C”列设置为包括在内,因此我想创建一个名为“ H”的新列,该列具有“ C”列的值减去“ B”列的值。

我以为可以循环执行此操作,但是我的尝试未成功,搜索没有找到任何有用的信息(我有点新)。任何帮助将非常感激。

sessioninfo():R版本3.4.2(2017-09-28)平台:x86_64-w64-mingw32 / x64(64位)运行于:Windows 10 x64(内部版本18363)

矩阵产品:默认

区域设置:[1] LC_COLLATE = English_United Kingdom.1252 LC_CTYPE = English_United Kingdom.1252
[3] LC_MONETARY = English_United Kingdom.1252 LC_NUMERIC = C
[5] LC_TIME = English_United Kingdom.1252

附加的基本软件包:[1]统计信息图形grDevices utils数据集方法基础

通过名称空间(未附加)加载:[1]编译器_3.4.2工具_3.4.2

托马斯·艾斯科丁

这是基本的R选项

k <- subset(key, include == "yes")
output <- cbind(base,setNames(base[k[["cols"]]]-base[k[["subtract"]]],k$names))

我们会得到

> output
       A B  C D  E  H  J
1 orange 5  7 5  1  2 -4
2  apple 3 12 2 18  9 16
3 banana 6  4 7  4 -2 -3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用其他两个数据帧中的信息构建数据帧

如何基于R中其他数据帧中的信息创建矩阵?

如何从单个数据帧列中减去数组?

如何基于R数据帧或数据表中其他列中的值将值分配给列

用于基于R中其他数据帧值填充数据帧值的创意循环

如何基于R中的另一个数据帧重命名数据帧的所有列?

基于列中的某些值,更新另一个数据帧熊猫中的其他列

减去与其他数据帧中的索引匹配的值

基于一列比较两个数据帧(具有不同长度),并检索 r 中的其他列

如何根据其他数据帧的行将新列添加到数据帧中?

基于前两列合并两个数据帧,其中相同的信息在R中的排列方式不同

向量中的R个数据帧列

使用 R 中另一个数据帧的其他匹配 ID 替换数据帧中的值

Pyspark:基于一个列值从另一个数据帧中减去一个数据帧

根据其他数据行中的行和列信息索引数据帧

如何基于R中的多个列聚合数据帧?

如何基于R中的列对数据帧进行分类?

如何在R中基于列的数据帧相交

基于 R 中其他数据帧的子集数据帧为 Mantel 测试创建对称矩阵

从R中的数据帧的较小列中减去较大列

如何在R中相互减去两个数据帧

基于比较其他数据帧值生成带有布尔列的新数据帧

基于来自其他数据帧的各种列构建数据帧

在R中,如何基于列表元素对数据帧的某些列进行降序排序,而其他列按升序排序?

使用 spark scala 中的其他数据帧过滤一个数据帧

基于来自其他数据帧的多行替换数据帧中的值

如何基于基础R中的另一个数据帧对数据帧进行子集

如何获得最大 基于数据帧中其他列的值,每一行的n周期值?

如何基于时间序列Pandas数据帧的其他两个布尔列确定列中的状态?