R 值发生变化的子集数据帧
我想根据值更改的位置过滤R 值发生变化的子集数据帧,r,dataframe,subset,R,Dataframe,Subset,我想根据值更改的位置过滤data.frame中的行。 假设我有: id name quarter score 1. 01 john q1 2020 80 2. 01 john q2 2020 80 3. 01 john q3 2020 85 4. 01 john q4 2020 75 5. 02 adam q1 2020 80 6. 02 adam q2 2020 8
data.frame
中的行。
假设我有:
id name quarter score
1. 01 john q1 2020 80
2. 01 john q2 2020 80
3. 01 john q3 2020 85
4. 01 john q4 2020 75
5. 02 adam q1 2020 80
6. 02 adam q2 2020 80
7. 02 adam q3 2020 85
8. 03 lana q1 2020 50
无论四分之一和分数在哪里变化,我都要过滤掉这些行。所以上面的数据框应该是
id name quarter score
1. 01 john q2 2020 80
2. 01 john q3 2020 85
3. 01 john q4 2020 75
4. 02 adam q2 2020 80
5. 02 adam q3 2020 85
如何将单元格的值与R中前一行的值进行比较?您可以使用
dplyr
中的lead
功能:
library(dplyr)
result <- df %>% filter(quarter != lead(quarter), score != lead(score))
result
# id name quarter score
#2. 1 john q22020 80
#3. 1 john q32020 85
#4. 1 john q42020 75
#6. 2 adam q22020 80
#7. 2 adam q32020 85
也许你可以试试下面的
subset
+ave
subset(
df,
!!ave(score,id,FUN = function(x) c(TRUE,diff(x)!=0)&length(x)>1)
)
给
id name quarter score
1 1 john q1_2020 80
3 1 john q3_2020 85
4 1 john q4_2020 75
5 2 adam q1_2020 80
7 2 adam q3_2020 85
数据
> dput(df)
structure(list(id = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 3L), name = c("john",
"john", "john", "john", "adam", "adam", "adam", "lana"), quarter = c("q1_2020",
"q2_2020", "q3_2020", "q4_2020", "q1_2020", "q2_2020", "q3_2020",
"q1_2020"), score = c(80L, 80L, 85L, 75L, 80L, 80L, 85L, 50L)), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8"))
> dput(df)
structure(list(id = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 3L), name = c("john",
"john", "john", "john", "adam", "adam", "adam", "lana"), quarter = c("q1_2020",
"q2_2020", "q3_2020", "q4_2020", "q1_2020", "q2_2020", "q3_2020",
"q1_2020"), score = c(80L, 80L, 85L, 75L, 80L, 80L, 85L, 50L)), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8"))