我正在尝试修改由dplyr过滤的data.frame,但我似乎不太了解我需要做什么 . 在下面的例子中,我试图过滤数据框z然后为第三列分配一个新值 - 我举两个例子,一个带有“9”,一个带有“NA” .
require(dplyr)
z <- data.frame(w = c("a", "a", "a", "b", "c"), x = 1:5, y = c("a", "b", "c", "d", "e"))
z %>% filter(w == "a" & x == 2) %>% select(y)
z %>% filter(w == "a" & x == 2) %>% select(y) <- 9 # Should be similar to z[z$w == "a" & z$ x == 2, 3] <- 9
z %>% filter(w == "a" & x == 3) %>% select(y) <- NA # Should be similar to z[z$w == "a" & z$ x == 3, 3] <- NA
然而,它不起作用:我收到以下错误消息:
“z%>%filter的错误(w ==”a“&x == 3)%>%select(y)< - NA:不可能de trouver la fonction”%>%< - “
我知道我可以使用旧的data.frame表示法,但dplyr的解决方案是什么?
谢谢!
2 回答
过滤将对数据帧进行子集化 . 如果要保留整个数据框,但要修改其中的一部分,则可以使用
mutate
和ifelse
. 我已将stringsAsFactors=FALSE
添加到您的示例数据中,以便y
将成为字符列 .或者
replace
:我的印象是dplyr包在哲学上反对修改你的底层数据 . 您可能会发现此操作的data.table包更友好:
我也是基地R的一种方式,但是我没有't know it. In particular, I can'来获得
merge
或match
来完成这项工作 .