r - 计算数据,按年份和按区域划分的R

标签 r grouping tidyverse data-management

我有一个很大的生物数据集(无法在Excel中打开),看起来像这样

    year <- c(1990, 1980, 1985, 1980, 1990, 1990, 1980, 1985, 1985,1990, 
              1980, 1985, 1980, 1990, 1990, 1980, 1985, 1985,
              1990, 1980, 1985, 1980, 1990, 1990, 1980, 1985, 1985)
    species <- c('A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'A','A', 'A', 
                 'B', 'B', 'B', 'C', 'C', 'C', 'A', 'A', 'A', 'B', 'B', 'B', 
                 'C', 'C', 'C', 'A')
    region <- c(1, 1, 1, 3, 2, 3, 3, 2, 1, 1, 3, 3, 3, 2, 2, 1, 1, 1,1, 3, 3, 
                3, 2, 2, 1, 1, 1)
    df <- data.frame(year, species, region)

    df
    year species region
 1  1990       A      1
 2  1980       A      1
 3  1985       B      1
 4  1980       B      3
 5  1990       B      2
 6  1990       C      3
 7  1980       C      3
 8  1985       C      2
 9  1985       A      1
 10 1990       A      1
 11 1980       A      3
 12 1985       B      3
 13 1980       B      3
 14 1990       B      2
 15 1990       C      2
 16 1980       C      1
 17 1985       C      1
 18 1985       A      1
 19 1990       A      1
 20 1980       A      3
 21 1985       B      3
 22 1980       B      3
 23 1990       B      2
 24 1990       C      2
 25 1980       C      1
 26 1985       C      1
 27 1985       A      1

我要做的是弄清楚我拥有的三年(1980、1985或1990)中的每个区域(1、2或3)中每种物种(A,B或C)的数量。 。

我希望最终得到一个看起来与此类似的数据集,
      region A_1980 B_1980 C_1980 A_1985 B_1985 C_1985 A_1990 B_1990 C_1990
 1      1      0      0      0      0      0      0      0      0      0
 2      2      1      1      1      1      1      1      1      1      1
 3      3      2      2      2      2      2      2      2      2      2

这样,每一行代表一个地区,每一列代表特定年份中每种物种的数量。我尝试使用spread函数和group_by dplyr函数来执行此操作,但是我无法让它做任何接近我想要的事情。

有没有人有什么建议?

最佳答案

像这样吗?

library(dplyr)

df2 <- df %>% 
  mutate(sp_year = paste(species, year, sep = "_")) %>%
  group_by(region) %>% 
  count(sp_year) %>% 
  spread(sp_year,n)

df2

这给出了:
# A tibble: 3 x 10
# Groups:   region [3]
  region A_1980 A_1985 A_1990 B_1980 B_1985 B_1990 C_1980 C_1985 C_1990
   <dbl>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>
1      1      1      3      3     NA      1     NA      2      2     NA
2      2     NA     NA     NA     NA     NA      3     NA      1      2
3      3      2     NA     NA      3      2     NA      1     NA      1

关于r - 计算数据,按年份和按区域划分的R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53356871/

相关文章:

r - 如何在 R 中获得逆 CDF(内核)?

r - 如何在 RMarkdown 中的 PowerPoint 幻灯片上包含多个图形?

html - XML 中的 XSLT 动态列

r - 从列中提取日期并在 R 中缺少年份时添加年份

r - 每周第二个星期二结束的 2 周总和

r - 使用ggplot在R中分别绘制点和线

python - 如何在单独的numpy数组中对具有相同值的numpy数组元素进行分组

R函数——计算年龄组+空年龄

c++ - 由于 cpp11 编译错误,R tidyr 包安装失败(扩展模式 x 不包含参数包)

r - 将循环结果附加到向量中