gpt4 book ai didi

r - 如何为由 dplyr 过滤的 data.frame 赋值?

转载 作者:行者123 更新时间:2023-12-04 03:11:01 24 4
gpt4 key购买 nike

我正在尝试修改由 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

然而,它不起作用:我收到以下错误消息:

"Error in z %>% filter(w == "a" & x == 3) %>% select(y) <- NA : impossible de trouver la fonction "%>%<-"



我知道我可以使用旧的 data.frame 表示法,但是 dplyr 的解决方案是什么?

谢谢!

最佳答案

过滤将对数据框进行子集化。如果你想保留整个数据框,但修改它的一部分,你可以,例如使用 mutateifelse .我已添加 stringsAsFactors=FALSE到您的样本数据,以便 y将是一个字符列。

z <- data.frame(w = c("a", "a", "a", "b", "c"), x = 1:5, y = c("a", "b", "c", "d", "e"), 
stringsAsFactors=FALSE)

z %>% mutate(y = ifelse(w=="a" & x==2, 9, y))

  w x y
1 a 1 a
2 a 2 9
3 a 3 c
4 b 4 d
5 c 5 e


或与 replace :
z %>% mutate(y = replace(y, w=="a" & x==2, 9),
y = replace(y, w=="a" & x==3, NA))

  w x    y
1 a 1 a
2 a 2 9
3 a 3 <NA>
4 b 4 d
5 c 5 e

关于r - 如何为由 dplyr 过滤的 data.frame 赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36924911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com