【发布时间】:2018-04-17 22:49:58
【问题描述】:
您好,我尝试对数据应用简单函数来为组创建sub_id。
test = data.frame(gr=gl(2,4), id =rep(c("Good","bad","ugly","dirty"),2),
count=c(175,1,13,11, 10,165,10,2))
> test
gr id count
1 1 Good 175
2 1 bad 1
3 1 ugly 13
4 1 dirty 11
5 2 Good 10
6 2 bad 165
7 2 ugly 10
8 2 dirty 2
sub_id 的条件是这样的
如果组号等于最小值count 和id==bad,则这些组的 sub_id 为red flag 否则(不满足此条件的其他组)green flag。
所以我写了这个函数
sub_id <- function(gr,count,id){
if (gr==min(count)&id=="bad"){
"red flag"
}
else
"green flag"
}
试过了
library(dplyr)
test%>%
group_by(gr)%>%
mutate(color=sub_id(gr,count,id))
给我
# A tibble: 8 x 4
# Groups: gr [2]
gr id count color
<fctr> <fctr> <dbl> <chr>
1 1 Good 175 green flag
2 1 bad 1 green flag
3 1 ugly 13 green flag
4 1 dirty 11 green flag
5 2 Good 10 green flag
6 2 bad 165 green flag
7 2 ugly 10 green flag
8 2 dirty 2 green flag
Warning messages:
1: In if (gr == min(count) & id == "Bad") { :
the condition has length > 1 and only the first element will be used
2: In if (gr == min(count) & id == "Bad") { :
the condition has length > 1 and only the first element will be used
预期输出
gr id count color
<fctr> <fctr> <dbl> <chr>
1 1 Good 175 red flag
2 1 bad 1 red flag
3 1 ugly 13 red flag
4 1 dirty 11 red flag
5 2 Good 10 green flag
6 2 bad 165 green flag
7 2 ugly 10 green flag
8 2 dirty 2 green flag
【问题讨论】:
-
你能解释一下你的情况吗?如果第二行数等于 2 怎么办?那么第 5 到 8 行会被标记为红色?
-
R 也是区分大小写的。在您的
id变量中,bad是小写字母,而在您的if条件中,它是大写 bBad -
@Masoud 就是这么简单。我只关心组号是否等于最小
count和id==bad。然后当我们对数据进行分组时,满足此条件的组是red flag否则green flag -
@JilberUrbina 哦,对不起,我更正了!
-
最小
count和id==bad我不清楚。对于带有id==bad的行,您想要count的最小值吗?所以假设我们有一行id==bad和count==0那么一切都会被标记为绿色?
标签: r if-statement dplyr