Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.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、mutate和ifelse时出现奇怪的问题。是虫子吗?_R_Dplyr - Fatal编程技术网

dplyr错误:组合group_by、mutate和ifelse时出现奇怪的问题。是虫子吗?

dplyr错误:组合group_by、mutate和ifelse时出现奇怪的问题。是虫子吗?,r,dplyr,R,Dplyr,我对dplyr和groupby、mutate和ifelse的组合有一些奇怪的问题。考虑下面的数据.框架< /P> > df1 crawl.id group.id hits.diff 1 1 1 NA 2 1 2 NA 3 2 2 0 4 1 3 NA 5 1 3 NA 6

我对dplyr和groupby、mutate和ifelse的组合有一些奇怪的问题。考虑下面的数据.框架< /P>
> df1
  crawl.id group.id hits.diff
1        1        1        NA
2        1        2        NA
3        2        2         0
4        1        3        NA
5        1        3        NA
6        1        3        NA
当我使用它时,下面的代码

library(dplyr)
df1 %>%
  group_by(group.id) %>% 
  mutate( hits.consumed = ifelse(hits.diff<=0,-hits.diff,0) )
但是,删除
groupby()
ifelse
一切正常:

df1 %>%
  mutate( hits.consumed = ifelse(hits.diff<=0,-hits.diff,0) )

crawl.id group.id hits.diff hits.consumed
1        1        1        NA            NA
2        1        2        NA            NA
3        2        2         0             0
4        1        3        NA            NA
5        1        3        NA            NA
6        1        3        NA            NA

df1 %>%
  group_by( group.id ) %>%
  mutate( hits.consumed = -hits.diff )

  crawl.id group.id hits.diff hits.consumed
1        1        1        NA            NA
2        1        2        NA            NA
3        2        2         0             0
4        1        3        NA            NA
5        1        3        NA            NA
6        1        3        NA            NA

将其全部包装在
as.numeric
中以强制输出格式,这样默认情况下
NA
s是
logical
,不会覆盖输出变量的类:

df1 %>%
  group_by(group.id) %>% 
  mutate( hits.consumed = as.numeric(ifelse(hits.diff<=0,-hits.diff,0)) )

#  crawl.id group.id hits.diff hits.consumed
#1        1        1        NA            NA
#2        1        2        NA            NA
#3        2        2         0             0
#4        1        3        NA            NA
#5        1        3        NA            NA
#6        1        3        NA            NA
df1%>%
分组依据(组id)%>%

mutate(hits.consumered=as.numeric(ifelse)(hits.diffIt对我来说也失败。看起来组需要至少一个非NA值才能工作。例如,
df1[2:3,]%%>%group_by(group.id)%%>%mutate(hits.consumered=ifelse(hits.diff是的,你是正确的。
df1[1:3,]
仍失败
df1[2:3,]
有效。它似乎是旧dplyr版本464的转世。你可以将其作为一个发行版提交!你完全正确!我正在浏览该版本#489和@romainfrancois响应——看起来这种行为是由
ifelse
为某些组返回的不一致类型造成的:逻辑组和数字组。你的解决方案是在输入分组变异之前将其强制转换为数字。效果非常好!谢谢。我整个上午都在努力解决这个问题!@thelatemail,上面的查询工作得很好,并给了我相应列的结果,但所有只有字母的列都没有值,字母数字是原样的,num是原样的eric就是这样。如何获取列的两个值。建议me@thelatemail,在我的data.frame中做了一些小改动,但效果很好。谢谢:)
structure(list(crawl.id = c(1, 1, 2, 1, 1, 1), group.id = structure(c(1L, 
2L, 2L, 3L, 3L, 3L), .Label = c("1", "2", "3"), class = "factor"), 
    hits.diff = c(NA, NA, 0, NA, NA, NA)), .Names = c("crawl.id", 
"group.id", "hits.diff"), row.names = c(NA, -6L), class = "data.frame")
df1 %>%
  group_by(group.id) %>% 
  mutate( hits.consumed = as.numeric(ifelse(hits.diff<=0,-hits.diff,0)) )

#  crawl.id group.id hits.diff hits.consumed
#1        1        1        NA            NA
#2        1        2        NA            NA
#3        2        2         0             0
#4        1        3        NA            NA
#5        1        3        NA            NA
#6        1        3        NA            NA
out <- df1[1:2,] %>%  mutate( hits.consumed = ifelse(hits.diff <= 0, -hits.diff, 0))
class(out$hits.consumed)
#[1] "logical"
out <- df1[1:3,] %>%  mutate( hits.consumed = ifelse(hits.diff <= 0, -hits.diff, 0))
class(out$hits.consumed)
#[1] "numeric"