我有数据帧列表,每个数据帧都包含数值
#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,也会评估这两个逻辑。 但是,如果值为"高",则您不希望发生另一个赋值。