r - 在 R 中的特定行上发生变异
问题描述
我想对特定行进行变异,同时评估多行的变异,这些行将保持在简单filter()
. 我能怎么做?
df <-
data.frame(ID = c(1,1,1,2,2,2,3,3,3),
Date= c(1,2,3,1,2,3,1,2,3),
Money = c(500,400,500,5000,100,100,200,300,300),
Status = c("Good", "Bad", "Good", "Good","Good","Good", "Bad","Good","Good"))
例如,我想mutate(Money = max(Money))
在Date==1
但同时我不想删除其他变量或在所有分组日期执行突变。有什么办法吗?结果应如下表所示。
result <-
data.frame(ID = c(1,1,1,2,2,2,3,3,3),
Date= c(1,2,3,1,2,3,1,2,3),
Money = c(5000,400,500,5000,100,100,5000,300,300),
Status = c("Good", "Bad", "Good", "Good","Good","Good", "Bad","Good","Good"),
Status_overall = c("Bad", "Bad", "Bad", "Good","Good","Good", "Bad","Bad","Bad"))
解决方案
也许试试这个。您可以将最大值存储在新变量中,然后使用条件按组进行变异。我不知道结果中的最后一个变量来自哪里:
library(dplyr)
#Code
new <- df %>% mutate(Val=max(Money)) %>%
group_by(ID) %>% mutate(Money=ifelse(Date==1,Val,Money)) %>%
select(-Val)
输出:
# A tibble: 9 x 4
# Groups: ID [3]
ID Date Money Status
<dbl> <dbl> <dbl> <fct>
1 1 1 5000 Good
2 1 2 400 Bad
3 1 3 500 Good
4 2 1 5000 Good
5 2 2 100 Good
6 2 3 100 Good
7 3 1 5000 Bad
8 3 2 300 Good
9 3 3 300 Good
也许没有复杂性的简单方法可能是(@GregorThomas建议):
#Code2
new <- df %>% mutate(Money=ifelse(Date==1,max(Money),Money))
输出:
ID Date Money Status
1 1 1 5000 Good
2 1 2 400 Bad
3 1 3 500 Good
4 2 1 5000 Good
5 2 2 100 Good
6 2 3 100 Good
7 3 1 5000 Bad
8 3 2 300 Good
9 3 3 300 Good
推荐阅读
- java - LDAP 条目中毒已在 jdk-8u191 中修复?
- java - 按标签和属性过滤 gremlin 路径
- r - R 相当于 python 中的 string.replace()
- command-prompt - 删除临时/隐藏文件
- angular - Receive Payload post in Angular 4+
- r - R Calculate sample weights and weighted aggregation based on reference table
- google-chrome-extension - Chrome extension webrequest api not intercepting mailto or any other non http urls
- design-patterns - What is delegation in julia?
- objective-c - confused by substring result of stringByDeletingLastPathComponent
- ubuntu - 字体在 Ubuntu 18.04 上是粗体,但在 18.10 上不是