R在不使用汇总或过滤器的情况下查找观察子集中的最大值
R Finding the maximum value in subsets of observations without using summarise or filter
各位,
我有以下数据框示例,其中包含患者的 ID(1 和 2)、他们的类别 X(是或否)以及参数值
df <- data.frame (ID = c (1, 1, 1, 1, 2, 2, 2),
X = c ("YES", "YES", "NO", "NO", "YES", "NO", "NO"),
Value = c (10, 15, 12, 13, 18, 16, 17))
df
这提供了以下内容table:
ID X Value
1 1 YES 10
2 1 YES 15
3 1 NO 12
4 1 NO 13
5 2 YES 18
6 2 NO 16
7 2 NO 17
我想得到一个新的列结果,它会给出最大值,每个病人,在列 X 中响应“是”,如下所示
ID X Value Result
1 1 YES 10 15
2 1 YES 15 15
3 1 NO 12 15
4 1 NO 13 15
5 2 YES 18 18
6 2 NO 16 18
7 2 NO 19 18
我知道我可以使用 group_by 和 summarize 来获取值,但我想使用 mutate 以便我可以遵循我为这个项目构建的所有变量,并且出于同样的原因, 避免过滤功能。
以下解决方案为我提供了结果列,但同样我希望每个 ID 只需要一个值。
df %>%
group_by(ID,X)%>%
mutate (Result = max(Value))
ID X Value Result
<dbl> <chr> <dbl> <dbl>
1 1 YES 10 15
2 1 YES 15 15
3 1 NO 12 13
4 1 NO 13 13
5 2 YES 18 18
6 2 NO 16 19
7 2 NO 19 19
非常感谢您的帮助
您可以使用此代码:
df %>% group_by(ID) %>% mutate(result = max(Value[X == "YES]))
这个呢?
> transform(df, Result = ave(Value, ID, X, FUN = max))
ID X Value Result
1 1 YES 10 15
2 1 YES 15 15
3 1 NO 12 13
4 1 NO 13 13
5 2 YES 18 18
6 2 NO 16 19
7 2 NO 19 19
使用data.table
library(data.table)
setDT(df)[, result := max(Value[X == "YES"], na.rm = TRUE), ID]
各位,
我有以下数据框示例,其中包含患者的 ID(1 和 2)、他们的类别 X(是或否)以及参数值
df <- data.frame (ID = c (1, 1, 1, 1, 2, 2, 2),
X = c ("YES", "YES", "NO", "NO", "YES", "NO", "NO"),
Value = c (10, 15, 12, 13, 18, 16, 17))
df
这提供了以下内容table:
ID X Value
1 1 YES 10
2 1 YES 15
3 1 NO 12
4 1 NO 13
5 2 YES 18
6 2 NO 16
7 2 NO 17
我想得到一个新的列结果,它会给出最大值,每个病人,在列 X 中响应“是”,如下所示
ID X Value Result
1 1 YES 10 15
2 1 YES 15 15
3 1 NO 12 15
4 1 NO 13 15
5 2 YES 18 18
6 2 NO 16 18
7 2 NO 19 18
我知道我可以使用 group_by 和 summarize 来获取值,但我想使用 mutate 以便我可以遵循我为这个项目构建的所有变量,并且出于同样的原因, 避免过滤功能。
以下解决方案为我提供了结果列,但同样我希望每个 ID 只需要一个值。
df %>%
group_by(ID,X)%>%
mutate (Result = max(Value))
ID X Value Result
<dbl> <chr> <dbl> <dbl>
1 1 YES 10 15
2 1 YES 15 15
3 1 NO 12 13
4 1 NO 13 13
5 2 YES 18 18
6 2 NO 16 19
7 2 NO 19 19
非常感谢您的帮助
您可以使用此代码:
df %>% group_by(ID) %>% mutate(result = max(Value[X == "YES]))
这个呢?
> transform(df, Result = ave(Value, ID, X, FUN = max))
ID X Value Result
1 1 YES 10 15
2 1 YES 15 15
3 1 NO 12 13
4 1 NO 13 13
5 2 YES 18 18
6 2 NO 16 19
7 2 NO 19 19
使用data.table
library(data.table)
setDT(df)[, result := max(Value[X == "YES"], na.rm = TRUE), ID]