在dplyr中是否可以操作输入数据集?
我正在使用dplyr对数据帧应用多个筛选和选择操作。是否可以直接更改输入对象中的数据 所以我想实现这样的目标:在dplyr中是否可以操作输入数据集?,r,dplyr,R,Dplyr,我正在使用dplyr对数据帧应用多个筛选和选择操作。是否可以直接更改输入对象中的数据 所以我想实现这样的目标: library(dplyr) mtcars %>% filter(mpg>20) %>% select(cyl) <- mtcars %>% filter(mpg>20) %>% transmute(cyl=8) mtcars[which(mtcars$mpg>20),"cyl"] <- 8 mtcars 库(dplyr) mt
library(dplyr)
mtcars %>%
filter(mpg>20) %>%
select(cyl) <- mtcars %>%
filter(mpg>20) %>%
transmute(cyl=8)
mtcars[which(mtcars$mpg>20),"cyl"] <- 8
mtcars
库(dplyr)
mtcars%>%
过滤器(mpg>20)%>%
选择(气缸)%
过滤器(mpg>20)%>%
转化(循环=8)
显然,这会导致错误
在base R中,它将如下所示:
library(dplyr)
mtcars %>%
filter(mpg>20) %>%
select(cyl) <- mtcars %>%
filter(mpg>20) %>%
transmute(cyl=8)
mtcars[which(mtcars$mpg>20),"cyl"] <- 8
mtcars
mtcars[其中(mtcars$mpg>20),“cyl”]一种方式是:
mtcars %>%
mutate(cyl = ifelse(mpg > 20, 8, cyl))
你不想变形,但想变异
您的示例可以这样编写:
mtcars2 <- mtcars %>%
filter(mpg>20) %>%
select(cyl) %>%
filter(mpg>20) %>%
mutate(cyl=8)
你的意思是,像mtcars%过滤器…
?显然,您的错误是由管道中间的箭头引起的。请注意,如果您修改数据集(同名),则必须在其上工作以获得原始数据重新加载。最好使用一个临时名称。如果我运行:mtcars%filter(mpg>20)%%>%transmute(cyl=8)mtcars,则只返回气缸。我想用更改的柱面获取整个数据帧。这是因为您希望变异
,而不是转化
。当心@Elin说的话@snoram您完全正确,但这是因为给定的示例首先存在缺陷(仅选择cyl
后,在mpg
上进行过滤)。请把这个答案看成是教育性的。我将添加一个注释。对不起,实际问题是,我希望更改mtcars数据帧,而不是创建新对象。@Kriselack然后从我的答案中删除mtcars2
的2
。但是,如果您真的在谈论mtcars
dataframe,并且它不仅仅是自定义数据帧的一个示例,那么就不应该这样做。