您好我是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列,所以我不能手动执行此操作。再次感谢
答案 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。