如何创建按列最小的新数据框。
例如此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
答案 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