r - 使用Apply而不是for(使用数据框的2列)

标签 r for-loop apply

我有一个像这样的数据框:

 Letters      Dates
       A 22/03/2015
       A 22/03/2015
       A 23/03/2015
       B 22/03/2015
       B 23/03/2015
       C 23/03/2015
       C 23/03/2015

我想创建另一列 (Dates2),它在每一行指定具有该字母的所有行的最小日期。这是结果:

Letters      Dates     Dates2
      A 22/03/2015 22/03/2015
      A 22/03/2015 22/03/2015
      A 23/03/2015 22/03/2015
      B 22/03/2015 22/03/2015
      B 23/03/2015 22/03/2015
      C 23/03/2015 23/03/2015
      C 23/03/2015 23/03/2015

我用 for 循环编写了以下代码,但我想更有效地完成它(使用向量而不是循环)。我如何使用应用/其他解决方案来做到这一点?

rm(list=ls())

data <- data.frame(rbind(c("A", "22/03/2015"),
                         c("A", "22/03/2015"),
                         c("A", "23/03/2015"),
                         c("B", "22/03/2015"),
                         c("B", "23/03/2015"),
                         c("C", "23/03/2015"),
                         c("C", "23/03/2015")
                        ), stringsAsFactors=FALSE)

colnames(data) <- c("Letters", "Dates")

for (i in 1:nrow(data))
{
  thisLetter = data$Letters[i]
  temp = subset(data$Dates, data$Letters == thisLetter)
  min_date = min(as.Date(temp, "%d/%m/%Y"))
  data$Dates2[i] = format(min_date, "%d/%m/%Y")
}

非常感谢!

最佳答案

我们可以使用data.table。将“data.frame”转换为“data.table”,按“字母”分组,转换为“日期”类后根据“日期”对行进行排序,得到'Dates' 的第一个元素 (head(Dates, 1)) 并对其进行赋值 (:=) 以创建 'Dates2' 列。

library(data.table)
setDT(data)[order(as.Date(Dates)), Dates2 := head(Dates,1), by = Letters]

dplyr

library(dplyr)
data %>% 
     group_by(Letters) %>%
     arrange(as.Date(Dates)) %>%
     mutate(Date2 = first(Dates))

关于r - 使用Apply而不是for(使用数据框的2列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40467552/

相关文章:

r - R中的单向哈希函数

将 NA 替换为 r 中每个组的同一列另一行中的值

java - 如何在此数组代码上进行 for 循环?

R data.table 在所有行上应用具有多列输入的函数并获得合理的输出

r - 如何在集群内集群

r - 如何扩展我的 R Shiny 应用程序以获得更大的数据输入?

r - 在结合了颜色和形状的 ggplot 图例中继续对我的数据进行排序

java - 在for循环中查找 'i'的值?

javascript - 如何拆分字符串数组,将字符串数字解析为整数,然后在 for 循环中将它们相加

r - 在 R : recursive function that operates on its own previous result 中应用