【问题标题】:R: Reducing data set and creating a conditional meanR:减少数据集并创建条件均值
【发布时间】:2015-06-09 14:28:06
【问题描述】:

所以我有一个大数据集,有很多列 (10) 和 100,000 行。其中一列是观察日期,另外两列对应的列是一个物种和另一年。首先,我想创建一个新列,该列将为我提供前 10% 的观察(每个物种每年)每年每个物种的平均观察日期。其次,我想减少该数据集,以便只保留计算中涉及的行(即:前 10%)。最后,重要的是我的新数据集具有其他对应的列,其中包含每个观察的信息,即位置等。 数据集的样本(确实存在更多列):

date=c(3,84,98,100,34,76,86...)
species=c(blue,purple,grey,purple,green,pink,pink,white...)
id=c(1,2,3,2,4,5,5,6...)
year=c(1901,2000,1901,1996,1901,2000,1986...)  
habitat=c(forest,plain,mountain...)

例如:第一行说蓝色物种于 1901 年 1 月 3 日在森林中被发现。

【问题讨论】:

标签: r conditional reduction


【解决方案1】:

好的,这是使用 dplyr 的一种方法。这将使用每个分组的前 10% 观察值按物种和年份为您提供变量的平均值。

require(dplyr)

# test data set
test <- data.frame(species = c(rep("blue", 100), rep("purple",100)), 
                   year = rep(c(1901, 1902, 1903, 1904, 1905), 40),
                   value = rnorm(200),
                   stringsAsFactors = FALSE)

# checking data set
group_by(test, species, year) %>% summarise(n = n(), mean.value = mean(value))

# by species and year, identify first ten per cent of observations
test <- test %>% group_by(species, year) %>%
  mutate(nth.ob = seq_along(species), n.obs = n(), pc = round((nth.ob/n.obs*100), 2) ) %>% 
  arrange(species, year) # sort for easy viewing

# and check
head(test)
Source: local data frame [6 x 6]
Groups: species, year

  species year      value nth.ob n.obs pc
1    blue 1901 -0.2839094      1    20  5
2    blue 1901 -1.7158035      2    20 10
3    blue 1901  1.1664650      3    20 15
4    blue 1901 -0.0935940      4    20 20
5    blue 1901 -0.1199253      5    20 25
6    blue 1901  0.3461677      6    20 30

# reduce to top 10 %, summarise and drop unwanted variables
out <- test %>%
  filter(pc <= 10) %>% # select first 10% of observations by species and year
  summarise(mean_val = mean(value))
out


Source: local data frame [10 x 3]
Groups: species

   species year    mean_val
1     blue 1901 -0.99985643
2     blue 1902  0.08355729
3     blue 1903  0.67396796
4     blue 1904  0.14425229
5     blue 1905 -0.19426698
6   purple 1901  0.95767665
7   purple 1902 -0.40730494
8   purple 1903  0.10032964
9   purple 1904  0.36295224
10  purple 1905  1.30953008

如果您随后想要检测到第一次观察的设置,我认为最好的方法是执行类似

的操作
setting <- group_by(species, year) %>% 
    filter(row_number() == 1)

然后将数据加入out数据集

【讨论】:

    猜你喜欢
    • 2012-12-09
    • 2017-09-02
    • 2017-08-25
    • 2023-02-02
    • 2013-09-06
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多