gpt4 book ai didi

R:基于行过滤器创建多个数据框

转载 作者:行者123 更新时间:2023-12-05 01:12:46 27 4
gpt4 key购买 nike

我有一个如下所示的数据框(df):

  Date           Group       Value
01-04-2029 Saffron 62.78
01-04-2029 Green 75.65
01-05-2019 Saffron 67.89
01-06-2019 Saffron 54.56
01-06-2019 Green 77.00
01-07-2019 Green 71.22

目标:我想基于 Group 创建两个单独的数据框。基本上我正在寻找以下内容

df_saffron: 
Date Group Value
01-04-2029 Saffron 62.78
01-05-2019 Saffron 67.89
01-06-2019 Saffron 54.56

df_green:
Date Group Value
01-04-2029 Green 75.65
01-06-2019 Green 77.00
01-07-2019 Green 71.22

具体来说,如果我使用以下代码片段 (this thread)

for(i in unique(as.character(df$Group))) {
nam <- paste("df", i, sep = ".")
assign(nam, df[df$Group==i,])
}

我没有得到任何像 df.Greendf.Saffron 这样的数据框。我的意思是我得到了

<0 rows> (or 0 -length row.names) 

我也看过 this SO线程,但我收到错误。

Error in assign(as.character(v, data %>% filter(data$Group == v), envir = .GlobalEnv)) :
argument "value" is missing, with no default
In addition: Warning message:
In data.matrix(data) : NAs introduced by coercion

我是 R 的新手,因此想知道我在哪里错过了任何线索?

最佳答案

使用 split :

list_data <- split(df, df$Group)

如果您需要单独的数据框,这将为您提供数据框列表。

names(list_data) <- paste0("df_", names(list_data))
list2env(list_data, .GlobalEnv)

展示如何转换 for循环代码到 lapply .

这是 for循环代码:

for(i in unique(as.character(df$Group))) {
nam <- paste("df", i, sep = ".")
assign(nam, df[df$Group==i,])
#More code
#More code
#More code
}

将其更改为 lapply :

lapply(split(df, df$Group), function(x) {
#More code
#More code
#More code
})

您实际上也可以使用 by这不需要拆分数据。

by(df, df$Group, function(x) {
#More code
#More code
#More code
})

而不是访问 df_green 中的数据, df_saffronfor循环,您可以在 x 中访问它在 lapply/by .

关于R:基于行过滤器创建多个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61516846/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com