R语言 如果该组的每个样本的阈值均高于阈值,则选择数据集中的值

ny6fqffe  于 2023-03-27  发布在  其他
关注(0)|答案(2)|浏览(150)

我想在R中从类似的dataframe生成heatmap,只保留**“CLASS”“VALUE”大于0,但对于每个样本,因此在这种情况下只丢弃CLASS“D”**:
| 类别|样品|价值|
| - ------|- ------|- ------|
| A类|十|1个|
| B|十|1个|
| C级|十|1个|
| D级|十|无|
| A类|是|1个|
| B|是|1个|
| C级|是|无|
| D级|是|无|
| A类|Z型|1个|
| B|Z型|无|
| C级|Z型|无|
| D级|Z型|无|
然后创建一个像这样的dataframe:
| 类别|样品|价值|
| - ------|- ------|- ------|
| A类|十|1个|
| B|十|1个|
| C级|十|1个|
| A类|是|1个|
| B|是|1个|
| C级|是|无|
| A类|Z型|1个|
| B|Z型|无|
| C级|Z型|无|
| B|Z型|无|
| C级|Z型|无|
| D级|Z型|无|
我尝试过filter(df, VALUE>0),但生成的热图显示的是空方块
有什么建议吗?
谢谢!

5vf7fwbs

5vf7fwbs1#

在按“CLASS”分组后尝试使用any

library(dplyr) #version >= 1.1.0
df1 %>% 
   filter(any(VALUE >0), .by = CLASS)
  • 输出
CLASS SAMPLE VALUE
1     A      X     1
2     B      X     1
3     C      X     1
4     A      Y     1
5     B      Y     1
6     C      Y     0
7     A      Z     1
8     B      Z     0
9     C      Z     0

数据

df1 <- structure(list(CLASS = c("A", "B", "C", "D", "A", "B", "C", "D", 
"A", "B", "C", "D"), SAMPLE = c("X", "X", "X", "X", "Y", "Y", 
"Y", "Y", "Z", "Z", "Z", "Z"), VALUE = c(1L, 1L, 1L, 0L, 1L, 
1L, 0L, 0L, 1L, 0L, 0L, 0L)), class = "data.frame", row.names = c(NA, 
-12L))
mcdcgff0

mcdcgff02#

下面是使用ave + subset的基本R选项

> subset(df,ave(VALUE, CLASS) > 0)
   CLASS SAMPLE VALUE
1      A      X     1
2      B      X     1
3      C      X     1
5      A      Y     1
6      B      Y     1
7      C      Y     0
9      A      Z     1
10     B      Z     0
11     C      Z     0

相关问题