在R中如何基于另一数据框的数值计算并添加命名新列?
在R中为Destination数据框添加基于飞机型号的耗时列
完全可以实现,下面给你两种简单的方法,适合刚接触R的新手:
方法1:基础R循环实现(灵活适配任意数量的飞机型号)
这种方法不需要额外安装包,用R自带功能就能完成,而且如果以后飞机型号增加,代码不用大改:
首先建立飞机型号与速度的关联映射:
# 生成型号-速度的对应关系,方便后续调用 aircraft_speeds <- setNames(Aircraft$Speed, Aircraft$type)
然后循环每个飞机型号,计算耗时并添加为新列:
for (plane in names(aircraft_speeds)) { # 生成新列名:Time+型号 new_col <- paste0("Time", plane) # 计算耗时:距离除以对应飞机的速度,添加到Destination中 Destination[[new_col]] <- Destination$Distance / aircraft_speeds[[plane]] }
运行后查看结果:
Destination
输出示例:
Location Distance TimeX TimeY TimeZ 1 A 50 1.0000000 0.8333333 0.7142857 2 B 150 3.0000000 2.5000000 2.1428571 3 C 200 4.0000000 3.3333333 2.8571429 4 D 400 8.0000000 6.6666667 5.7142857
方法2:用tidyverse包实现(代码更简洁直观)
如果后续打算深入学习R数据处理,tidyverse系列包会很实用。先安装并加载dplyr包:
# 未安装过tidyverse的话先运行这行: # install.packages("tidyverse") library(dplyr)
直接用mutate函数添加新列:
Destination <- Destination %>% mutate( TimeX = Distance / Aircraft$Speed[Aircraft$type == "X"], TimeY = Distance / Aircraft$Speed[Aircraft$type == "Y"], TimeZ = Distance / Aircraft$Speed[Aircraft$type == "Z"] )
这种写法直接指定每一列的计算逻辑,新手更容易理解,缺点是如果飞机型号增多,需要手动添加对应行的计算代码。
补充说明
R支持向量与标量的运算:Destination$Distance是长度为4的向量,除以单个速度值(标量)时,会自动让每个距离值都除以该速度,刚好满足需求。
内容的提问来源于stack exchange,提问作者Rozza1
相关产品推荐
相关产品推荐

