我有一个数据框,我想向其中添加新列,但其中的计算取决于包含指令的另一个数据框中的值。
我在下面创建了一个可重现的示例(尽管实际上还有很多列),
输入数据框:
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] 删除。
我来说两句