如何在mtcars数据集中,每行的hp超过110时插入一行新数据,并仍保留hp <= 110的车辆?
library(tidyverse)
data(mtcars)
我尝试了以下操作,但没有成功--
mtcars %>% modify_if(.p = .$hp>110,.f = add_row(.after=1)) #noe equal lengths
mtcars %>% filter(hp>110) %>% add_row(.after=1) #only gives an extra row for the first row meeting condition
mtcars %>% rownames_to_column() %>%
group_by(rowname) %>% modify_if(.p=.$hp>110,.f=add_row(.after=1)) #not egual length
以下使用purrr似乎可以解决问题:
foo <- function(df){
if (df$hp>110) {df<-add_row(.data=df,.after=1)}
df
}
mtcars %>% rownames_to_column(var = "make") %>% nest(-make) %>%
mutate(new=map(data,~ foo(.x))) %>% select (-data) %>% unnest(new)
任何调用
add_row_if
函数的操作???
table(mtcars$hp>110)
表明有18个为真,14个为假。这18个为真的应该像你的示例一样添加一个新行。因此,最终解决方案应该有36+14=50行,而不是36行。可以通过rbinding两个来解决,但似乎太复杂了。 - Misha