【问题标题】:How to convert rows in a data frame as unique with a for loop?如何使用 for 循环将数据框中的行转换为唯一的?
【发布时间】:2016-03-17 11:26:24
【问题描述】:

我有以下类型的数据。一列有树种(33 种),一个有树 ID(对于每个物种,观察到许多树),一列有每个物种的每棵树的一些值,年,月:

Tree.ID、物种、值、年、月

数据集相当大 > 20 000 行。为了进一步分析,我需要首先将数据框中的 Species 列转换为唯一字符,因为稍后我需要为每个物种运行一个 for 循环并分析它们多年来的行为。

这是我用来将数据框中的 Species 列转换为唯一字符的代码。我正在使用以下代码,该代码不起作用并且仅返回一个物种,而不是所有 33 个物种及其所有值。

for(sp in unique(flower.B$Species)){
  dat.sp <- flower.B[flower.B$Species == sp,]

对此有什么想法吗?

【问题讨论】:

  • 您能否提供一个可重现的示例来显示当前和所需的输出?
  • 我认为现在没有必要这样做。稍后您必须将数据框拆分为Species(最终拆分为Year)并计算您的结果。有很多方法可以做到这一点,例如ddply 来自包 plyr 或使用包 data.tableby() 来自 base R。
  • flower.B 是调用的数据框
  • @Gabriela 只是为了更清楚地了解您要查找的内容,您想从数据框中提取 Species 的唯一值,然后按 ID 对每个唯一 Species 进行子集化吗?跨度>

标签: r unique


【解决方案1】:

您在循环的每次迭代中都覆盖 dat.sp,这是需要的吗?无论如何,以下对我来说很好。

data(iris)
for(sp in unique(iris$Species)){
  print(iris[iris$Species %in% sp, ])
}

我不确定循环的其余部分将包含什么,但我建议查看 split 命令,该命令与 apply 系列函数结合使用很有用。例如,请参见以下内容:

lapply(split(iris, iris$Species), NROW)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 2021-07-31
    • 2012-12-09
    • 2022-11-29
    • 2021-08-21
    • 2018-03-19
    • 2023-04-01
    相关资源
    最近更新 更多