【问题标题】:Condition for function and loop函数和循环的条件
【发布时间】:2013-03-11 17:01:25
【问题描述】:

我有一个简化如下的数据框:

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 列表 之后我应用一个包含循环的函数,结果是一个新列“Diameter2”,我希望从函数中得到结果,它可以正常工作:

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 <- cpfit@cpts
 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 的“直径”值,而不是对其余 ID 应用该函数:

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 的条件是否重要。 谢谢

【问题讨论】:

    标签: r function loops conditional-statements


    【解决方案1】:

    我不确定我是否正确理解了这个问题。我试着回答。 我假设您想将函数应用于“直径”数据帧的“直径”字段,以“ID”字段为条件,并在相应的直径 2 字段中返回结果。我不知道这个功能是如何工作的,如果这不起作用,请见谅。

    选定的字段

    diameter$diameter2[diameter$ID=="r1_1"|diameter$ID=="r1_3"]

    未选择的字段

    直径$diameter2[直径$ID!="r1_1" & 直径$ID=="r1_3"]

    【讨论】:

      猜你喜欢
      • 2020-08-27
      • 1970-01-01
      • 2019-10-31
      • 2013-11-29
      • 2022-09-27
      • 1970-01-01
      • 2020-09-02
      • 2020-04-05
      • 2017-11-12
      相关资源
      最近更新 更多