r - 如何根据其他数据框中的信息减去 R 数据框列?
问题描述
我有一个数据框,我想向其中添加新列,但计算取决于另一个包含指令的数据框中的值。
我在下面创建了一个可重现的示例(尽管实际上还有很多列),
输入数据框:
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))
键数据框在基本数据框中的每一列都有一行,并且必须将“包含”列设置为“是”才能完成任何计算。如果它设置为yes,那么我想添加一个具有定义名称的新列,该列减去给定列。
例如,基本数据框中的“C”列设置为包含,因此我想创建一个名为“H”的新列,其中包含“C”列中的值减去“B”列中的值。
我以为我可以通过循环来做到这一点,但我的尝试没有成功,我的搜索也没有找到任何有帮助的东西(我有点新)。任何帮助将非常感激。
sessioninfo():R 版本 3.4.2 (2017-09-28) 平台:x86_64-w64-mingw32/x64 (64-bit) 运行于:Windows 10 x64 (build 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] stats graphics grDevices utils datasets methods base
通过命名空间加载(未附加):[1] compiler_3.4.2 tools_3.4.2
解决方案
以下内容对您有用吗?
output <- base
for(i in which(key[["include"]] == "yes")){
key.row <- key[i, ]
output[[key.row[["names"]]]] <- base[[key.row[["cols"]]]] - base[[key.row[["subtract"]]]]
}
结果:
> 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
推荐阅读
- tensorflow - python的tensorflow导入错误
- java - 嵌入式实体上的休眠过滤器
- javascript - JavaScript - 如何将输入值从弹出窗口传递到 Chrome 中的父窗口?
- electron - 为什么我的电子应用程序打包后无法启动?
- powershell - 使用 PowerShell 查询 AD 以匹配二进制数据
- https - Flash Builder 中没有 HTTPS 吗?
- python - ValueError:无法将字符串转换为浮点数:Python中的“lisans”
- ios - 检查用户的 Spotify 库中是否存在歌曲
- python - 带有函数和 if/break 语句的 while 循环?
- linux - 静态精灵图像设置的段 %fs 在哪里?