[英]Conditionally change values in some rows using existing factor levels, possibly in dplyr
[英]Modify a variable in a data frame, only for some levels of a factor (possibly with dplyr)
样本df:
df <- data.frame(x = c(runif(10,0,2*pi),runif(10,0,360)), group = gl(n = 2, k = 10, labels =c("A","B")))
我只想为A
组修改x
(将其转换为度)。 有了base
我就是这样做:
df <- within(df,x[group == "A"] <- x[group == "A"]*180/pi)
我想知道dplyr
是否有办法做到这dplyr
。 这是错误的:
df <- df %>% filter(group == "A") %>% mutate(x = x*180/pi)
因为它仅返回df
的子集,其中group == "A"
。 有没有(简单的)方法来执行此操作,或者这种情况是base
王牌dplyr
易于使用?
我们可以使用ifelse
创建的逻辑条件,并基于我们要么做算术运算或else
返回原始值。
df %>%
mutate(x = ifelse(group=="A", x*180/pi, x))
或就像@AlexIoannides提到的if_else
,可以使用if_else
的dplyr
来处理type
。
在data.table
,这可以通过就地分配来完成,并且应该更有效。
library(data.table)
setDT(df)[group=="A", x := x*180/pi]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.