实现具有按列分组的最小值的数据帧

时间:2019-02-08 12:48:21

标签: r data.table

如何创建按列最小的新数据框。

例如此df:

df <- read.table(header = TRUE, text = 'Gene   Value
A      12
A      10
B      3
B      0
B      6
C      1
D      0
D      4')

现在使用:

test <- setDT(df)[, .SD[which.min(Value)], by=Gene]

我明白了:

> test
   Gene Value
1:    A    10
2:    B     0
3:    C     1
4:    D     0

但是我如何在这里对Value> 0使用第二个条件?我想要这个输出:

> test
   Gene Value
1:    A    10
2:    B     3
3:    C     1
4:    D     4

3 个答案:

答案 0 :(得分:4)

可以做到:

setDT(df)[, .(Value = min(Value[Value > 0])), by=Gene]

输出:

   Gene Value
1:    A    10
2:    B     3
3:    C     1
4:    D     4

答案 1 :(得分:2)

您可以使用tidyverse进行分组,过滤,然后汇总最小值:

library(tidyverse)

df2 <- df %>% 
  group_by(Gene) %>%
  filter(Value != 0) %>% 
  summarise(Value = min(Value))

# A tibble: 4 x 2
  Gene  Value
  <fct> <dbl>
1 A        10
2 B         3
3 C         1
4 D         4

答案 2 :(得分:0)

使用 Map<String, Object> data = new HashMap<String, Object>(); data.put("property", 123); String message = "Some text: #{#data['property']}"; ExpressionParser parser = new SpelExpressionParser(); Expression expression = parser.parseExpression(message, new TemplateParserContext()); StandardEvaluationContext context = new StandardEvaluationContext(); context.setVariable("data", data); System.out.println(expression.getValue(context,String.class)); 中的aggregate

base R