繁体   English   中英

修改数据框中的变量,仅适用于某些水平的因子(可能使用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_elsedplyr来处理type


data.table ,这可以通过就地分配来完成,并且应该更有效。

library(data.table)
setDT(df)[group=="A", x := x*180/pi]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM