在R中的向量中保存循环的输出

时间:2017-03-29 16:59:31

标签: r loops if-statement

我有一个.cvs文件,由4列和120行组成。 我试图通过每一行,我在哪里看到" 1"在第三列(这里称为" Dam")中,我想将该行保存在名为" Dam.one"

的矩阵中

到目前为止,这是我的代码:

DamType = c( "Dam.one", "Dam.two", "Dam.three", "NoDam.one", "NoDam.two", "NoDam.three")

for (i in 1:120) {
    if (mercury.raw[i,]["Dam"] == 1) {
        if (mercury.raw[i,]["Type"] == 1){
            DamType["Dam.one"] <-  mercury.raw[i,]  
}}}

这是数据集的前6个条目:`

> mercury.raw
                    Lake Mercury Dam Type
1                ALLEN.P   1.080   1    1
2            ALLIGATOR.P   0.025   1    1
3        A.SAGUNTICOOK.L   0.570   0    2
4      BALCH&STUMP.PONDS   0.770   0    2
5           BASKAHEGAN.L   0.790   1    2
6          BAUNEAG.BEG.L   0.750   0    2

我希望DamType["Dam.one"]等于:

                 Lake Mercury Dam Type
1                ALLEN.P   1.080   1    1
2            ALLIGATOR.P   0.025   1    1

我不知道它有什么问题。 任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

矩阵不能存储在矢量中。列表可以存储多个矩阵(在这种情况下为数据帧)。这看起来就像您尝试对数据进行分组,并且不需要for循环。

DamType <- list()
DamType[["Dam.one"]] <- mercury.raw[mercury.raw$Dam == 1 & mercury.raw$Type == 1, ]

> DamType$Dam.one
         Lake Mercury Dam Type
1     ALLEN.P   1.080   1    1
2 ALLIGATOR.P   0.025   1    1

答案 1 :(得分:0)

我建议更熟悉R和常用软件包,例如dplyr。

library(dplyr)
dam_grouped <- mercury.raw %>% group_by(Dam)