将列添加到数据框列表并进行增量添加/循环通过 df 进行简单添加

Posted

技术标签:

【中文标题】将列添加到数据框列表并进行增量添加/循环通过 df 进行简单添加【英文标题】:Add column to list of data frames and do incremental addition / Loop through df for simple addition 【发布时间】:2019-12-03 10:58:43 【问题描述】:

我有这个数据框(实际上是那些 dfs 的列表):

ALL <- data.frame(x = 1:3, y = c("a", "b", "c"))

我想添加一个列,该列将某个值累加到数据框的末尾,如下所示: 0 + 0.05 = 0.05、0.05 + 0.05 = 0.1、0.1 + 0.05 = 0.15 以此类推。

因此,在我的示例中,结果将是

ALL <- data.frame(x = 1:3, y = c("a", "b", "c"), z=(0,0.05,0.1)

我想要走的路是将 cbind 与 lapply 一起使用(假设 ALL 是 dfs 的列表): ALL

但我的大脑并没有想出正确的 z 公式。

非常感谢您的帮助。

问候

通灵者

【问题讨论】:

【参考方案1】:

我们可以使用transform添加新列,seq生成序列。

lapply(list_df, function(df) transform(df, z = seq(0, by = 0.05, length.out = nrow(df))))

#[[1]]
#  x y    z
#1 1 a 0.00
#2 2 b 0.05
#3 3 c 0.10

#[[2]]
#  x y    z
#1 1 a 0.00
#2 2 b 0.05
#3 3 c 0.10
#4 4 d 0.15

tidyverse 中我们也可以这样做

library(dplyr)
library(purrr)

map(list_df, ~.x %>% mutate(z = seq(0, by = 0.05, length.out = n())))

数据

ALL <- data.frame(x = 1:3, y = c("a", "b", "c"))
ALL1 <- data.frame(x = 1:4, y = c("a", "b", "c", "d"))
list_df <- list(ALL, ALL1)

【讨论】:

【参考方案2】:

也许这就是你想要的

ALL$z <- 0.05*(0:(nrow(ALL)-1))

【讨论】:

【参考方案3】:

我们可以做一个赋值,然后返回数据集

lapply(list_df, function(x) x$z <- seq(0, by= 0.05, length.out = nrow(x));x)

数据

ALL <- data.frame(x = 1:3, y = c("a", "b", "c"))
ALL1 <- data.frame(x = 1:4, y = c("a", "b", "c", "d"))
list_df <- list(ALL, ALL1)

【讨论】:

以上是关于将列添加到数据框列表并进行增量添加/循环通过 df 进行简单添加的主要内容,如果未能解决你的问题,请参考以下文章

pyspark将列添加到列表中已经不存在的数据框

将列添加到具有恒定值的数据框

PySpark:当列是列表时,将列添加到 DataFrame

将列添加到由python中的for循环计算的数据框中

如何使用 for 循环将列值添加到数据框字典中,以便每个数据框都有一个唯一的列?

将列附加到新数据框