我选择hflights-dataset作为例子。
我尝试从平面创建一个包含“TailNum”的变量/列,但仅适用于播放时间最长的10%以下的平面。
install.packages("hflights")
library("hflights")
flights <-tbl_df(hflights)
flights %>% filter(cume_dist(desc(AirTime)) < 0.1) %>% mutate(new_var=TailNum)
编辑:结果数据帧只有22208个obs而不是227496.有没有办法保留原始数据帧,但为TeilNum添加一个新的变量,用于具有百分之十的通话时间的飞机?
答案 0 :(得分:3)
管道后面flights
中不需要mutate()
。
flights %>% filter(cume_dist(desc(AirTime)) < 0.1) %>% mutate(new = TailNum)
此外,new是一个函数,因此最好将其作为变量名称。见?新。 举例说明:
flights <-tbl_df(hflights)
flights %>% filter(cume_dist(desc(AirTime)) < 0.1) %>%
+ mutate(new_var = TailNum, new = TailNum) %>%
+ select(AirTime, TailNum, new_var)
Source: local data frame [22,208 x 3]
AirTime TailNum new_var
1 255 N614AS N614AS
2 257 N627AS N627AS
3 260 N627AS N627AS
4 268 N618AS N618AS
5 273 N607AS N607AS
6 278 N624AS N624AS
7 274 N611AS N611AS
8 269 N607AS N607AS
9 253 N609AS N609AS
10 315 N626AS N626AS
.. ... ... ...
要保留所有观察结果,请丢失filter()
。我的常规方法是使用ifelse()
代替。其他人可能会建议更好的解决方案。
f2 <- flights %>% mutate(cumdist = cume_dist(desc(AirTime)),
new_var = ifelse(cumdist < 0.1, TailNum, NA)) %>%
select(AirTime, TailNum, cumdist, new_var)
table(is.na(f2$new_var))
FALSE TRUE
22208 205288