R:如何根据数据帧列表中相对于特定定量阈值的位置将数值更改为字符

  • 本文关键字:位置 字符 阈值 数据帧 何根 列表 相对于 r
  • 更新时间 :
  • 英文 :


我有数据帧列表,每个数据帧都包含数值

#DummyData
df1 = data.frame(x = rnorm(11), y = rnorm(11))
df2 = data.frame(x = rnorm(11), y = rnorm(11))
df3 = data.frame(x = rnorm(11), y = rnorm(11))
df_list = mget(ls(pattern = "df[1-3]"))

我想根据数值与平均值周围 +/-10% 的关系重新编码数值。具体来说,我想将大于平均值高 10% 的值更改为"高",将平均值 10% 以内的值更改为"中",将比平均值低 10% 以上的值更改为"低"。

我这样做的策略是使用由多个ifelse语句组成的函数,然后使用lapply将其应用于列表

myfunction <- function(x) {C <-mean(x)
ifelse(x > 1.1*C, "High", x) 
ifelse(x < 0.9*C, "Low", "Medium")
}
df_list <- lapply(df_list, myfunction)

当我这样做时,我在df_list中只得到低和中,没有高。 如果我注释掉第二个 ifelse 语句,我会得到 High 分配。如何更改函数以解决此问题?谢谢你的时间。

尝试将两个ifelse()调用链接在一起:

myfunction <- function(x) {
    C <- mean(x)
    ifelse(x > 1.1*C, "High", ifelse(x < 0.9*C, "Low", "Medium")) 
}

您当前的逻辑意味着即使第一个 ifelse() 为 High 触发 true,也会评估这两个逻辑。 但是,如果值为"高",则您不希望发生另一个赋值。

最新更新