R:基于行筛选器创建多个数据帧

R:基于行筛选器创建多个数据帧,r,R,我有一个dataframedf,如下所示: 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 Gr

我有一个dataframedf,如下所示:

  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
目标:我想基于组创建两个独立的数据帧。基本上,我正在寻找以下内容

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
具体来说,如果我使用以下代码段

我还查看了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的新手,因此我想知道我错过了什么

这应该做到:

for (v in unique(df$Group)){

  tmp <- subset(df, Group == v)
  assign(paste0('df_', tolower(v)), tmp)

}
我总是发现,首先创建临时数据集比将其全部压缩到1分配步骤更容易

这应该做到:

for (v in unique(df$Group)){

  tmp <- subset(df, Group == v)
  assign(paste0('df_', tolower(v)), tmp)

}
我总是发现,首先创建一个临时数据集比将其全部压缩到1分配步骤更容易

使用拆分:

要将其更改为Lappy,请执行以下操作:

实际上,您也可以使用不需要拆分数据的

by(df, df$Group, function(x) {
    #More code
    #More code
    #More code
})
您可以在lappy/by中的x中访问df_green、df_saffron for循环中的数据,而不是访问df_green中的数据

使用拆分:

要将其更改为Lappy,请执行以下操作:

实际上,您也可以使用不需要拆分数据的

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

您可以在lappy/by中的x中访问df_green、df_saffron for循环中的数据,而不是访问df_green中的数据

根据RonakShah的建议,我尝试了以下方法:

temp < -NULL
for (i in unique(as.character(Group)){
    nam <- paste("df", i, sep = ".")
    assign(nam, df[df$Group==i,])
   # more code
   result <- data.frame(Date = dates_all,
                        Group = i,
                        Value = all_values,
                        Derived = der_vals) 
   }
 temp <-result
 final <-rbind(temp,result)
换句话说,只有藏红花作为一个组被重复,尽管派生的值是正确的。
有人能帮上忙吗?

根据Ronaksah的建议,我尝试了以下方法:

temp < -NULL
for (i in unique(as.character(Group)){
    nam <- paste("df", i, sep = ".")
    assign(nam, df[df$Group==i,])
   # more code
   result <- data.frame(Date = dates_all,
                        Group = i,
                        Value = all_values,
                        Derived = der_vals) 
   }
 temp <-result
 final <-rbind(temp,result)
换句话说,只有藏红花作为一个组被重复,尽管派生的值是正确的。

有人能帮上忙吗?

我在assignpaste0data.,tolowerv,tmp中得到一个错误作为错误:缺少参数值,没有默认值。您的括号在错误的位置。使用assignpaste0data.,tolowerv,tmpWell,该括号是一个输入错误。同样抱歉。即使我使用相同的,我也无法获得df.green或df.saffronwell,那么您的数据结构肯定还有其他问题,因为它对我来说很好,抱歉。请将dat的dput添加到问题中,并将您使用的确切代码cop/粘贴到问题中,这样就不会出现输入错误。assignpaste0data.,tolowerv,tmp:缺少参数值,没有默认值。括号位于错误位置。使用assignpaste0data.,tolowerv,tmpWell,该括号是一个输入错误。同样抱歉。即使我使用相同的,我也无法获得df.green或df.saffronwell,那么您的数据结构肯定还有其他问题,因为它对我来说很好,抱歉。请将您的dat的dput添加到问题中,并使用cop/粘贴的确切代码,这样就不会出现拼写错误。您的代码适用于我,它给出了正确的df.Green和df.Saffron。如果将组列转换为带as.character的字符串,可能会有所帮助。首先,我想它们是一些因素。在StackOverflow上共享数据的最佳方法是使用dput,因此我们得到的数据帧与您看到的数据帧完全相同。您确定您有数据帧而不是矩阵吗。错误消息给出了一个提示。什么是classdf?@RonakShah:数据的类别是dataframe。抱歉,我忘了提及我已将数据转换为as.data.framedYour代码对我有效,它提供了正确的df.Green和df.Saffron。如果将组列转换为带as.character的字符串,可能会有所帮助。首先,我想它们是一些因素。在StackOverflow上共享数据的最佳方法是使用dput,因此我们得到的数据帧与您看到的数据帧完全相同。您确定您有数据帧而不是矩阵吗。错误消息给出了一个提示。什么是classdf?@RonakShah:数据的类别是dataframe。抱歉,我忘了提到我已将数据转换为as.data.framed。实际上,我的想法是在运行中对每个数据帧执行一些操作。因此可能需要for循环?有其他更好的方法对数据帧列表执行操作,例如lappy,但在不知道要对其执行操作的详细信息的情况下,很难对其进行评论每个数据帧。@pythondumb否,使用拆分的df并进行数据转换。@Rui:你能详细说明一下吗?@RonakShah:我正在尝试对每个数据帧运行一个时间序列模型。实际上,想法是动态地对每个数据帧执行一些操作。因此可能需要for loop?还有其他更好的方法来执行数据帧列表上的操作数据帧,例如lappy,但在不知道每个数据帧上要执行的操作细节的情况下,很难对其进行评论。@pythondumb不,使用拆分的df并lappy数据转换。@Rui:您能详细说明一下吗?@RonakShah:我正试图在每个数据帧上运行一个时间序列模型
lapply(split(df, df$Group), function(x) {
   #More code
   #More code
   #More code
})
by(df, df$Group, function(x) {
    #More code
    #More code
    #More code
})
temp < -NULL
for (i in unique(as.character(Group)){
    nam <- paste("df", i, sep = ".")
    assign(nam, df[df$Group==i,])
   # more code
   result <- data.frame(Date = dates_all,
                        Group = i,
                        Value = all_values,
                        Derived = der_vals) 
   }
 temp <-result
 final <-rbind(temp,result)
      Date           Group       Value     Derived
    01-04-2029      Saffron      62.78      22
    01-04-2029      Saffron      75.65      34.46
    01-05-2019      Saffron      67.89      54
    01-06-2019      Saffron      54.56      78
    01-06-2019      Saffron      77.00      29.85
    01-07-2019      Saffron      71.22      45.67