根据R中新行的计数创建新行

时间:2014-11-06 08:10:41

标签: r subset

您好我是R的新手,我的数据看起来像这样

row name units.1  units.2   units.3
       1        1       0        0
       2        0       1        0
       3        2       0        1
       4        0       0        0

我想添加一个新行,其中包含大于1的其他行的计数,如下所示:

row name units.1  units.2   units.3
   1        1       0        0
   2        0       1        0
   3        2       0        1
   4        0       0        0
   5        2       1        1

所以我可以稍后进行分组。提前致谢

我还希望根据第5行的总和对数据进行子集化,例如我只想要第5行中值为2或更多的列。

   row name units.1  
       1        1       
       2        0      
       3        2      
       4        0       
       5        2       

注意我的数据大约有5K列,所以我不能手动执行此操作。再次感谢

1 个答案:

答案 0 :(得分:3)

尝试:

df <- rbind(df, colSums(df > 1))

假设您的数据名为“df”。这将创建一个包含数据集中信息的新行。但是,如果您以后只需要对数据进行子集化,则可能不需要在数据中实际包含此行。相反,您可以在子集中计算相同的值。

问题更新后编辑:

选项1:

如果要选择df的所有列,其中条目数&gt; 1列在列中超过2,你可以这样做而不先创建额外的行:

df[, c(TRUE, colSums(df[,-1]) > 2)]
#  row.name units.1
#1        1       1
#2        2       0
#3        3       2
#4        4       0

要理解这一点,您需要查看

c(TRUE, colSums(df[,-1]) > 2)
#        units.1 units.2 units.3 
#   TRUE    TRUE   FALSE   FALSE

因此,这会创建一个逻辑向量,其中第一个元素为TRUE(因为您希望保留它的“行名称”列),然后对于其他列,如果列超过2,则为TRUE条目大于1。

选项2:

如果您想使用您创建的额外行,您可以执行以下操作:

df[, c(TRUE, df[nrow(df),] > 2)]
#  row.name units.1
#1        1       1
#2        2       0
#3        3       2
#4        4       0
#5        5       2

方法类似,但只有最后一行中的条目(因此每列的nrow(df)>> 2。