更新已过滤的数据集中的行。

时间:2018-04-30 19:53:35

标签: r shiny

我有一个经过筛选和显示的数据框。我想更新过滤后的数据。我可以在没有过滤的情况下轻松完成此操作,但在分配的左侧使用过滤器时出现错误。

res <- nearPoints(isolate({filter(rv$RawData, container == CurrPlate)}), isolate({input$PlateMap_click}), allRows = TRUE)

isolate({filter(rv$RawData,container == CurrPlate)$keepRows <- xor(filter(rv$RawData,container == CurrPlate)$keepRows, res$selected_)})

dataTableProxy("RawData")

selectRows(dataTableProxy("RawData"), which(rv$RawData$keepRows == FALSE))

过滤器中的数据很好。

 Called from: observerFunc()
 Browse[1]> filter(rv$RawData,container == CurrPlate)$keepRows
  [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
 [32] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
 [63] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
 [94] TRUE TRUE TRUE
 Browse[1]> xor(filter(rv$RawData,container == CurrPlate)$keepRows, res$selected_)
  [1]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
 [27]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
 [53]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
 [79]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE

但我无法找出更新数据的正确方法。

 Browse[1]> filter(rv$RawData,container == CurrPlate)$keepRows <- xor(filter(rv$RawData,container == CurrPlate)$keepRows, res$selected_)
 Error in filter(rv$RawData, container == CurrPlate)$keepRows <- xor(filter(rv$RawData,  : 
   could not find function "filter<-"
 Browse[1]> rv$RawData %>% filter(container == CurrPlate)$keepRows <- xor(filter(rv$RawData,container == CurrPlate)$keepRows, res$selected_)
 Error in rv$RawData %>% filter(container == CurrPlate)$keepRows <- xor(filter(rv$RawData,  : 
   could not find function "%>%<-"
 Browse[1]> 

1 个答案:

答案 0 :(得分:0)

您可以这样做(在<-赋值符号的左侧替换为“复杂”表达式),只有在明确提供了这样做的方法时才会这样做。

在错误消息中暗示:could not find function "filter<-"

用于子集化数据帧和向量的这种方法存在于基础R:

dat <- mtcars

dat[dat$cyl == 4, ]$mpg <- 333

或更好,推荐(因为你不是整个数据框的子集,只是感兴趣的矢量):

dat$mpg[dat$cyl == 4] <- 42

工作是因为$<-[<-[<-.data.frame$<-.data.frame作为函数存在。 (推荐阅读:help("[")help("[.data.frame"))。

在tidyverse的背景下,我不知道一种完全令人满意的方式。我会选择replace

library(dplyr)

dat <-
  dat %>% 
  mutate(mpg = replace(mpg, cyl == 4, -7))

最后,data.table有一个简洁的语法:

library(data.table)

setDT(dat)[cyl == 4, mpg := 37]