条件函数和循环

条件函数和循环

问题描述:

我有简化为后续的数据帧:条件函数和循环

head(dendro) 
    X   DateTime ID diameter dendro ring DOY month mday year Rain_mm_Tot Through_Tot temp 
1 1 2012-06-21 13:45:00 r1_1  5482  1 1 173  6 22 113   NA   NA NA 
2 2 2012-06-21 13:45:00 r2_3  NA  3 2 173  6 22 113   NA   NA NA 
3 3 2012-06-21 13:45:00 r1_2  5534  2 1 173  6 22 113   NA   NA NA 
4 4 2012-06-21 13:45:00 r2_4  NA  4 2 173  6 22 113   NA   NA NA 
5 5 2012-06-21 13:45:00 r1_3  5606  3 1 173  6 22 113   NA   NA NA 
6 6 2012-06-21 13:45:00 r2_5  NA  5 2 173  6 22 113   NA   NA NA 

数据帧首先被“ID”分裂,所以它的ID的 之后我应用功能的列表,其包括一个循环,其结果是一个新的栏目“直径2”,结果我从功能需要,即工程确定:

dendro_sp <- split(dendro, dendro$ID) 

library(changepoint) 

dendro_sp <- lapply(dendro_sp, function(x){ 

x <- subset(x, !is.na(diameter)) 
cpfit <- cpt.mean(x$diameter, method="BinSeg") 

x$diameter2 <- x$diameter 
cpts <- [email protected] 
means <- param.est(cpfit)$mean 
meanZero <- means[1] 

for(i in 1:(length(cpts)-1)){ 
    x$diameter2[(cpts[i]+1):cpts[i+1]] <- x$diameter2[(cpts[i]+1):cpts[i+1]] + (meanZero - means[i+1]) 
} 

return(x) 
}) 
dendro2 <- do.call(rbind, dendro_sp) 
rownames(dendro2) <- NULL 

我的问题是,我希望它有条件地应用它,例如r1_1和r1_3,并在新列“diameter2”中获取r3的“直径”值,instea应用功能ID的其余d:

ifelse(diameter$ID==c("r1_1","r1_3"), apply_the_function_to_r11_and_r13_to_calculate_diameter2, otherwise_write_diameter_value_in_diameter2_column) 

请记住,数据帧“dendro”是由ID分裂,我不知道这是否定义条件数的ID是很重要的。 谢谢

我不知道我是否正确理解问题。我试着回答。 我假设你想将一个函数应用到“直径”data.frame的“直径”字段,在“ID”字段进行调整,并将结果重新对应在相应的直径2字段中。我不知道这个功能是如何工作的,所以如果这不起作用,请原谅我。

选定字段

直径$直径2 [直径$ ID == “r1_1” |直径$ ID == “r1_3”] < - yourfun(直径$直径[直径$ ID == “r1_1” |直径$ ID == “r1_3”]

未选定字段

直径$直径2 [直径$ ID = “r1_1” &直径$ ID == “r1_3”] <! - 直径$直径[直径$ ID = =“r1_1”|直径$ ID ==“r1_3”]