Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dplyr group_by和任何给出意外输出的命令_R_Dplyr - Fatal编程技术网

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和3
ifelse
似乎不希望返回多个值。它只取第一个值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
正在返回条件的第一个值。对不起--你能再扩展一点吗?你是什么意思条件的第一个值?,这非常有帮助。我将此标记为已解决。谢谢。