dplyr group_by和任何给出意外输出的命令
以下是一个示例数据集:dplyr group_by和任何给出意外输出的命令,r,dplyr,R,Dplyr,以下是一个示例数据集: > temp ID Visit Issue SpecialExclusion 1 X123 5 12345 FALSE 2 X123 5 67890 FALSE 3 X123 5 34934 FALSE 31 X123 6 34934 FALSE 4 X123 6 67890 FALSE prim
> temp
ID Visit Issue SpecialExclusion
1 X123 5 12345 FALSE
2 X123 5 67890 FALSE
3 X123 5 34934 FALSE
31 X123 6 34934 FALSE
4 X123 6 67890 FALSE
primaryIssue <- c("12345")
excludedIssue <- c("12345", "67890")
然而,这似乎是可行的:
> temp %>% group_by(Visit) %>% mutate(SpecialExclusion = if(any(Issue == primaryIssue)){Issue %in% excludedIssue}else{SpecialExclusion})
Source: local data frame [5 x 4]
Groups: Visit
ID Visit Issue SpecialExclusion
1 X123 5 12345 TRUE
2 X123 5 67890 TRUE
3 X123 5 34934 FALSE
4 X123 6 34934 FALSE
5 X123 6 67890 FALSE
那么为什么
ifelse
失败了,而“if-then”起作用了呢?谢谢 我想这就是你想要的:
temp %>%
group_by(Visit) %>%
mutate(SpecialExclusion = any(Issue %in% primaryIssue) & Issue %in% excludedIssue)
# Source: local data frame [5 x 4]
# Groups: Visit
#
# ID Visit Issue SpecialExclusion
# 1 X123 5 12345 TRUE
# 2 X123 5 67890 TRUE
# 3 X123 5 34934 FALSE
# 4 X123 6 34934 FALSE
# 5 X123 6 67890 FALSE
您询问了ifelse
的情况。看看这个例子:
ifelse(1 == 1, 2:3, 4:5)
[1] 2
if(1 == 1) 2:3 else 4:5
[1] 2 3
ifelse(1:5 == 1, 'a', 'b')
[1] "a" "b" "b" "b" "b"
在这个简单的例子中,我测试1是否等于1。如果为真,则返回数字2和3ifelse
似乎不希望返回多个值。它只取第一个值2作为输出。这就是你的职能所做的。那么,既然更加灵活,那么不是每个人都会一直使用if
?看看这个例子:
ifelse(1 == 1, 2:3, 4:5)
[1] 2
if(1 == 1) 2:3 else 4:5
[1] 2 3
ifelse(1:5 == 1, 'a', 'b')
[1] "a" "b" "b" "b" "b"
我们测试了序列1到5是否等于1。第一个实例应该是真的,其余的应该是假的ifelse
以我们期望的方式执行。但是如果
只希望测试有一个值
if(1:5 == 1) 'a' else 'b'
[1] "a"
Warning message:
In if (1:5 == 1) "a" else "b" :
the condition has length > 1 and only the first element will be used
它给我们一个警告和一个'a'
,因为这是测试的第一个结果。如果语句需要一个条件测试,我们给它五个不同的TRUE和FALSE
因此,ifelse
适用于产生一个输出的许多测试。如果
适用于一个产生多个输出的测试。任何
都没有达到您认为的效果,我想检查访问中的任何问题是否属于排除问题。如果其中至少有一个是,我希望将ExcludedIssues中的所有问题都更改为True。因此,我检查:“是否存在任何(临时$issues)
,排除?--如果是--如果问题在excludedIssues
中,则返回一个TRUE。为什么逻辑错误?您对SpecialExclusion
专栏的答案是什么?我期待的是TRUE,false我附上了一个更可靠的示例这给出了与我的if else
相同的结果。然而,if else为什么不呢
work?这也不太管用。如果我让另一个函数修改“SpecialExclusion”列,你的方法将覆盖以前存在的任何内容。我的方法不会。这是因为ifelse
正在返回条件的第一个值。对不起--你能再扩展一点吗?你是什么意思条件的第一个值?,这非常有帮助。我将此标记为已解决。谢谢。