【问题标题】:Creating a subset in R using a double loop [closed]使用双循环在 R 中创建子集 [关闭]
【发布时间】:2015-02-07 20:15:08
【问题描述】:

我有一个非常大的 csv 文件,我已导入到 R 中,需要制作一个数据子集。 csv 看起来像这样:

Julian_Day   Id   Year
52            1   1901
56            5   1901
200           1   1968         

等,其中 year 是 1901-2010,Id 1-58 和 Julian_Day 1-200 大约为 130,000 行数据。所以我只想要每个 Id 每年的最低 Julian Day 值,并删除所有其他数据行。

【问题讨论】:

标签: r loops double conditional subset


【解决方案1】:

数据

df = data.frame(Year=c(1901,1901,1968,1901),
                Id=c(1,5,1,1),
                Julian_Day=c(52,56,200,40),
                Animal=c('dog','doggy','style','fashion'))

试试这个:

library(data.table)
setDT(df)[ ,min:=min(Julian_Day), by=list(Id, Year)]
#>df
#   Year Id Julian_Day  Animal min
#1: 1901  1         52     dog  40
#2: 1901  5         56   doggy  56
#3: 1968  1        200   style 200
#4: 1901  1         40 fashion  40

【讨论】:

  • 好吧,我试过了,唯一的问题是我遗漏了每行有更多的列。基本上每一行都是对动物的观察,包括日期、纬度、经度、位置等,所以我希望该行中的所有信息都出现,这样我就可以将其带回 Excel。我真的只是想消除所有不是每年第一次看到动物(Id)的数据行。
  • 已编辑。是你想要的吗?
  • Id 是动物(物种)。我给每个物种一个数字以使其更容易,至少我认为它会但是是的,还有纬度、经度、城市、人类足迹等,但我只是希望这些值在第一次看到时保持不变。
  • 你问一个问题,你有 3 个不同的答案在工作。然后你谈到完全不同的数据格式。要么您打开一个新问题,要么根据您的问题调整这些答案,这只是用您的真实变量名称替换虚拟变量名称;)
  • 当我按照您建议的方式进行操作时,它会告诉我每年每个 ID 的最低儒略日,但是它没有显示行的所有附加信息(纬度、经度、城市等)。那是您制作的子集吗?那可以导入回excel吗?
【解决方案2】:

或者简单地用基础R

aggregate(Julian_Day ~., df, min)
#   Year Id Julian_Day
# 1 1901  1         40
# 2 1968  1        200
# 3 1901  5         56

或者

library(dplyr)
df %>%
  group_by(Id, Year) %>%
  summarise(Julian_Day = min(Julian_Day))

# Source: local data frame [3 x 3]
# Groups: Id
# 
#   Id Year Julian_Day
# 1  1 1901         40
# 2  1 1968        200
# 3  5 1901         56

【讨论】:

  • 它的意思是:“UseMethod ("group_by_") 中的错误:没有适用于类函数对象的 'group by' 方法
  • 您必须提供您的数据集。否则我无法重现您的错误。我使用了上校提供的数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 2019-05-03
  • 1970-01-01
  • 2021-12-03
  • 2021-08-26
  • 2018-07-29
  • 1970-01-01
相关资源
最近更新 更多