使用dataframe数组在for循环中创建数据帧

时间:2012-06-27 13:21:10

标签: r

我的数据框如下所示。我需要根据RL

中可用的区域提取df
    >avg_data
    region  SN      value
    beta    1       32
    alpha   2       44
    beta    3       55
    beta    4       60
    atp     5       22


    > RL
           V1
    1 beta
    2 alpha

该数据框应该是类似于REGR [beta]的数组,其中应包含与beta相关的信息,如下所示

    region  SN      value
    beta    1       32
    beta    3       55
    beta    4       60

类似于REGRα

    region  SN      value
    alpha   2       44

这样我就可以将REGR作为绘图的参数传递。

    REGR <- data.frame()

    for (i in levels(RL$V1)){
     REGR[i,] <- avg_data[avg_data$region==i, ];
    }

我在上面的代码中犯了一些错误。请纠正我..谢谢

1 个答案:

答案 0 :(得分:1)

您可能会对split函数感兴趣。在帮助页面中,拆分divides the data in the vector x into the groups defined by f

因此,对于您的数据,它可能类似于:

> split(avg_data, avg_data$region)
$alpha
  region SN value
2  alpha  2    44

$atp
  region SN value
5    atp  5    22

$beta
  region SN value
1   beta  1    32
3   beta  3    55
4   beta  4    60

如果你想过滤掉RL中没有出现的记录,我可能会在预处理步骤中使用%in%函数和[进行提取:

x <- avg_data[avg_data$region %in% RL$V1,]
#-----
  region SN value
1   beta  1    32
2  alpha  2    44
3   beta  3    55

如果您想放弃atp,我就会向split提供这些内容。

如果你只是想绘图,上面的方法可能有点过分。以下是使用sapply迭代每个级别的区域并制作图表的示例:

sapply(unique(x$region), function(z) 
  plot(x[x$region == z,"value"], main=z[1]))