是否可以使用R中的lapply更新多个数据集?

x6h2sr28  于 2023-03-10  发布在  其他
关注(0)|答案(2)|浏览(91)

我目前正尝试通过向每个数据集添加新列来更新多个数据集。
我确实读过this question上的解决方案。但是运行

lapply(list(annual_2022_v2, bottom_2022_v2, q1_2022_v2, q2_2022_v2, q3_2022_v2, q4_2022_v2, top_2022_v2), transform, start_hour = hour(started_at))

我只打印了正确的输出,但没有更新或添加新列到我的原始数据集。
为了在一个单独的数据集上测试它,

lapply(list(q1_2022_v2), transform, start_hour = hour(started_at)).

虽然它打印了正确的数据集和新列,但它没有更新它。
我试图找出能够编写某种循环的“最佳”方法,而不是硬编码8个不同的数据集,例如

q1_2022_v2$start_hour <- hour(q1_2022_v2$started_at)
q2_2022_v2$start_hour <- hour(q2_2022_v2$started_at)
q3_2022_v2$start_hour <- hour(q3_2022_v2$started_at)
q4_2022_v2$start_hour <- hour(q4_2022_v2$started_at)

我也看到了使用Map()和cbind()的解决方案,但我对它们的工作原理感到困惑。
我最终决定不把事情复杂化,只使用一个数据集。

qzwqbdag

qzwqbdag1#

如果不赋值,lapply的返回值就丢失了,lapply不是for循环,它是做函数式编程的,打印出来的是它的返回值。
首先把这些数据集放到一个列表中。我强烈怀疑它们都有相同的结构,这意味着它们从来不应该是分开的,即在创建/导入它们的时候把它们放到列表中。

all_2022_v2 <- mget(ls(pattern = glob2rx("*_2022_v2")))

all_2022_v2 <- lapply(all_2022_v2, transform, start_hour = hour(started_at))

您可能应该rbind这四个数据集,并将q作为分组列。

wgx48brx

wgx48brx2#

我认为你需要把那个代码分配给新的数据试试这个

df<-lapply(list(data), transform, newcol = somevalue)

相关问题