如何将计算值添加到R中的现有列

时间:2018-10-30 16:16:20

标签: r

我有一个数据框(文件),其中有两列:

Path length: 0.5; 0.5; NA; 5; NA; 8; NA
Global efficiency: NA; NA; 0.8; 0.2; 0.3; NA; NA

现在,我想通过path length = 1 / global efficiency将全局效率值转换为路径长度值。我只想在路径长度值= NA时执行此操作。然后,我想将计算出的路径长度添加到现有列“路径长度”中。有什么帮助吗?

我已经做了:

  ifelse(file$P_L_Mean != 'NA')
    {
    file$P_L_Mean <- 1/file$P_Eglob_Mean
    }

但这不会将值添加到现有列中...

谢谢!

2 个答案:

答案 0 :(得分:1)

我们用is.na创建一个逻辑索引并分配

i1 <- is.na(file$P_L_Mean)
file$P_L_Mean[i1] <- 1/file$P_Eglob_Mean[i1]

我们也可以使用ifelse

file$P_L_Mean <- with(file, ifelse(is.na(P_L_Mean), 1/P_Eglob_Mean, P_L_Mean))

答案 1 :(得分:1)

X=data.frame(path_length=c(0.5,0.5,NA,5,NA,8),global_eff=c(NA,NA,0.8,0.2,0.3,NA))

fun=Vectorize(function(x,y){if (is.na(x)){return(1/y)}})
X= X %>% mutate(global_eff_2=fun(path_length,global_eff))