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