如何将一个因子定义为高于或低于R的中位数?

时间:2016-10-26 09:27:30

标签: r statistics

所以我需要创建一个定义我的' alt'变量(海拔高度)高于或低于其中位数。

我知道它应该遵循创造新事物的基本形式:

conservation$alt.factor <- conservation$alt (..????...)

但我只是在努力争取最后一点。

必须有简单的命令!

2 个答案:

答案 0 :(得分:2)

这很简单。查找高于计算中值的值,并为新变量分配一些新值。这很容易在代码中解释:

set.seed(357)
xy <- data.frame(original = rnorm(100))

above.median <- xy$original > median(xy$original) # find values above the median
xy$new[above.median] <- "above" # to those that are above, assign "above"
xy$new[!above.median] <- "below" # notice the exclamation mark which negates the statement
head(xy)

    original   new
1 -1.2411173 below
2 -0.5832050 below
3  0.3947471 above
4  1.5042111 above
5  0.7667997 above
6  0.3174604 above

library(ggplot2)

ggplot(xy, aes(x = original, y = 1, color = new)) +
  theme_bw() +
  geom_point() +
  scale_color_brewer(palette = "Set1")

enter image description here

答案 1 :(得分:0)

使用ifelse()

conservation$alt.factor <- factor(
  ifelse(conservation$alt < median(conservation$alt, na.rm = TRUE), 1, 
   ifelse(conservation$alt > median(conservation$alt, na.rm = TRUE), 2, NA)), 
 1:2, labels = c("below", "above"))

请注意,此设置会将conservation$alt == median(conservation$alt)的所有行设置为NA。如果不需要,只需将ifelse - 语句中的最后一个参数更改为其他参数。