【发布时间】:2023-02-15 22:01:51
【问题描述】:
我有一个像这样的数据框去向:
df <- data.frame(year = c("2000", "2000", "2001", "2001", "2002", "2002", "2003", "2007", "2008"),
id = c("A", "A", "A", "A", "A", "A", "A", "B", "B"),
product = c("1", "2", "3", "4", "5", "6", "7", "8", "9"),
market = c("CHN", "USA", "CHN", "CAN", "CHN", "ECU", "CHN", "ESP", "IRL"),
FP = c(1, 1, 1, 1, 1, 1, 1, 1, 1),
FM = c(1, 1, 0, 1, 0, 1, 0, 1, 1),
first_success = c(0,0,0,0,2002,2002,2002,0, 0)
)
我想(通过 id)删除 first_success 年之后的观察结果(在变量中定义第一次成功并采用成功的年份的价值)。如果给定的 id(例如 B)没有成功,那么我想保留这些零。因此,在这种情况下,我只会删除第 7 行:
df_new <- data.frame(year = c("2000", "2000", "2001", "2001", "2002", "2002", "2007", "2008"),
id = c("A", "A", "A", "A", "A", "A", "B", "B"),
product = c("1", "2", "3", "4", "5", "6", "8", "9"),
market = c("CHN", "USA", "CHN", "CAN", "CHN", "ECU", "ESP", "IRL"),
FP = c(1, 1, 1, 1, 1, 1, 1, 1),
FM = c(1, 1, 0, 1, 0, 1, 1, 1),
first_success = c(0,0,0,0,2002,2002,0,0)
)
我尝试了以下方法:
df %>%
group_by(id) %>%
subset(., first_succes!=0 & first_success<year)
filter(if(any(first_success)!=0) year<=first_success else TRUE)
但是 filter 保留了表达式,而不是删除它(与 subset() 相同)。
任何想法?
【问题讨论】:
标签: r if-statement dplyr tidyverse