如何根据变量的某个值/类别查看另一个变量(大型数据集)

How to look at a certain value/category of a variable according to another one (Large dataset)

提问人:Skyk 提问时间:10/24/2023 最后编辑:Skyk 更新时间:10/28/2023 访问量:55

问:

我正在根据我在 R Studio 中遇到的另一个问题来写这个问题。我有一个非常大的数据集,其中包含鸟类的运动数据 (ACC),并且每个个体都有多行(每行代表一个时间戳)。 在我的数据集中,我需要查看我在某个地区有多少人。 这里的问题是,我为每个人准备了许多行,并且使用简单的函数(如表或摘要)返回分配给该区域的行数。我想知道的是使用一个简单的功能来了解属于该领土的个人。

这是我到目前为止所做的:

  • 我的数据帧中有很多行,但只有大约 50 个人(每个行有多行)。
  • 我总共有大约 15 个区域,每行都有一个区域 ID(重复)。

我试过使用表

table(df$territory_id) %>% sort(decreasing = TRUE) %>% head

这给了我输出:

ter1  ter2  ter3  ter4  ter5  ter6 
275034 207746 232739 165260 162103 259644

在这里,我有具有区域 ID 的行数。因为我想知道一个地区有多少不同的人,所以我将这些地区子集在单独的对象中,并为此做了表格:

t <- filter(df, territory == "ter1")

然后:

table(t$individualID)

这给了我想要的输出。但是,我需要对每个地区重复该过程。

我想知道是否有更简单的方法可以做到这一点?我只有 15 个领土,但如果我有更多,那将需要很多时间来重复这个功能。有没有更简单的方法可以做到这一点?

R DPLYR 计数 子集 摘要

评论

0赞 Mark 10/24/2023
嗨,斯凯克!欢迎来到 Stack Overflow!您能否编辑您的问题,并包含示例数据帧?dput(df) 或 dput(head(df)) 可能很方便
0赞 Skyk 10/24/2023
谢谢!我愿意 !我只是不知道该怎么做(我应该把它写成代码吗?),问题是数据是用于硕士论文的,不幸的是,我的导师要求我不要分享它。我对 R Studio 也很陌生,我不知道如何自己创建数据帧,但我会尝试一下。
0赞 Mark 10/24/2023
没关系!如果你能创建类似的代码,那也行得通。创建代码,然后编辑您的问题以将其添加到
1赞 Mark 10/24/2023
不过,听起来您还处于 R 之旅的早期,也许入门课程会更好
0赞 PGSA 10/24/2023
为了给你一些更具体的搜索,请查看使用包的教程,以及 - 你可以指定一个分组变量(例如)。dplyrsummariseterritory_id

答:

1赞 Mark 10/25/2023 #1

你的数据看起来相当大,所以虽然你的头脑给出了数据的样子,但使用起来并不好(因为它似乎是一个位置的一只鸟的六个时间戳)。所以我创建了自己的,希望它仍然相似:

library(tidyverse)
set.seed(0)

df <- data.frame(
    bird_id = rep(1:10, each = 10),
    territory_id = sample(LETTERS[1:10], 100, replace = TRUE),
    timestamp =  ymd_hms("2023-01-01 12:00:00") + sample(1:10000000, 100, replace = TRUE))
> head(df)
  bird_id territory_id           timestamp
1       1            I 2023-03-05 03:57:14
2       1            D 2023-01-01 21:06:37
3       1            G 2023-03-01 07:23:02
4       1            A 2023-02-23 01:09:48
5       1            B 2023-03-29 22:41:45
6       1            G 2023-01-29 03:29:01

因此,虽然我很清楚你想分析你的数据集,但我不确定你具体想做什么。因此,这里有一些你可能想要的东西,以及如何去做。

# 1. get the number of birds you have seen at any point in each territory
df |>
  distinct(territory_id, bird_id) |>
  count(territory_id)

# 2. count the number of rows in your dataset for each territory
count(df, territory_id)

# 3. count the number of rows in your dataset for each territory and bird

count(df, territory_id, bird_id)
1赞 Skyk 10/25/2023 #2

是的!这就是我想知道的!非常感谢! 基本上,我已经查看了您提供的第一个代码:

df |>
distinct(territory_id, bird_id) |>
count(territory_id)

它返回的内容如下:

  territory_id     n
  <chr>        <int>
  1 GR002            2
  2 GR009            1
  3 GR011            1

等。。。

但在这里我想知道属于该领土的 individualID(也许我放了):

df |>
distinct(territory_id, bird_id) |>
count(territory_id, bird_id)

它返回了我:

  <chr>        <chr>                    <int>
  1 GR002        individual1 (eobs 5860)          1
  2 GR002        individual2 (eobs 5861)          1
  3 GR009        individual3 (eobs 6483)          1

这给了我我想要的。所以我只需要使用计数功能......谢谢!

评论

0赞 Mark 10/26/2023
不用担心!很高兴我能帮上忙😃,不要忘记标记您的问题已回答