R循环长数据返回最小值和累计值

标签 r loops dataframe cumulative-sum

Here is a link to my data .它看起来像这样:

year    cars    company
1975    11.75   chevy
1976    19.71   chevy
1977    21.23   chevy
1978    11.00   chevy
1979    8.26    chevy
1980    8.63    chevy
1981    19.09   chevy
1982    30.52   chevy
1983    27.51   chevy

我想创建两个新的变量列:

  1. year_first,这将返回公司在数据中列出的第一年(例如,对于每个“雪佛兰”行,这将是“1975”)
  2. cars_cumulative,它将返回特定公司生产的所有汽车的累计总数

因此,我希望我的数据看起来像这样:

year    cars    company year_first  cars_cumulative
1975    11.75   chevy   1975        11.75
1976    19.71   chevy   1975        31.46
1977    21.23   chevy   1975        52.69
1978    11.00   chevy   1975        63.69
1979    8.26    chevy   1975        71.95
1980    8.63    chevy   1975        80.58
1981    19.09   chevy   1975        99.67
1982    30.52   chevy   1975        130.19
1983    27.51   chevy   1975        157.70

我想我应该写一个 for 循环?我只是不确定最好的方法。

最佳答案

以下基本 R 技术应该适用于 data.frame df:

df <- data.frame(year=1975:1983, 
                 cars=c(11.75, 19.71, 21.23, 11, 8.26, 8.63, 19.09, 30.52, 27.51), 
                 company=rep("chevy", length(1975:1983)))
# add variables
df$year_first <- ave(df$year, df$company, FUN=min)
df$cars_cumulative <- ave(df$cars, df$company, FUN=cumsum)

@rawr 提到的一个很好的补充是,上面的这些行可以包装在 within 中,它告诉 R 使用 data.frame 作为第一个引用点:

within(df, {
  year_first <- ave(year, company, FUN=min)
  cars_cumulative <- ave(cars, company, FUN=cumsum)
})

within 的使用不仅省去了许多“df$”前缀的输入,使代码更易于阅读,而且还有助于组织代码,因为您可以将将所有其他变量创建到一个代码块中。

如果你正在处理一个非常大的数据集,或者你喜欢简洁的代码,你可以看看 data.table:

library(data.table)
setDT(df)
df[, c("year_first", "cars_cumulative"):=list(min(year), cumsum(cars)), by="company"]
# or 
df[, `:=`(year_first = year[1L], cars_cumulative = cumsum(cars)), by=company]

或与 dplyr:

library(dplyr)
df2 = df %>% group_by(company) %>% 
  mutate(year_first = first(year), cars_cumulative = cumsum(cars))

关于R循环长数据返回最小值和累计值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36875187/

相关文章:

r - 在 R 中使用特定值的特定颜色绘制栅格

r - R 中的 For 循环不打印我需要的内容

python - 为数据框中的每一行运行函数

r - 如何将数据驱动的 d3JS 图与 Shiny 集成?

javascript - 默认情况下, Shiny 的应用程序数据对于特殊输入小部件不可见

vba - 奇怪的VBA(错误?)-复制粘贴循环崩溃,除非添加了消息框

python - 在 Oracle DB 中将 pandas(字符串/对象)列保存为 VARCHAR 而不是 CLOB(默认行为)

python - 使用 Python 求 DataFrame 中总和的平均值

r - R 中的平行坐标图 (ggparcoord)

python - 代码优化python循环