Отображать только те значения строк, в которых разница между столбцами меньше 30 - PullRequest
0 голосов
/ 07 марта 2020

Я продолжаю безуспешно пытаться выбрать из файла Excel фильтр, в котором только значения строк, где три последовательных значения строки в столбце 'x' меньше 30 единиц. Например, в следующей таблице:

Name   age height speed
Helen  12. 1.20    40
Alan.  14. 1.40.   75
Hector.15. 1.25.   80
Ana.   11. 1.02.   81
Sophie.16. 1.40.   50

Когда разница в столбце speed ниже 30 в последовательных строках, она должна дать в результате:

Name   age height speed
Alan.  14. 1.40.   75
Hector.15. 1.25.   80
Ana.   11. 1.02.   81

Спасибо! !!

Ответы [ 2 ]

1 голос
/ 07 марта 2020

Если ваши данные такие:

x = structure(list(Name = structure(c(4L, 1L, 3L, 2L, 5L), .Label = c("Alan", 
"Ana", "Hector", "Helen", "Sophie"), class = "factor"), age = c(12, 
14, 15, 11, 16), height = c(1.2, 1.4, 1.25, 1.02, 1.4), speed = c(40L, 
75L, 80L, 81L, 50L)), class = "data.frame", row.names = c(NA, 
-5L))

Надеюсь, я правильно понял цифры:

    Name age height speed
1  Helen  12   1.20    40
2   Alan  14   1.40    75
3 Hector  15   1.25    80
4    Ana  11   1.02    81
5 Sophie  16   1.40    50

Затем выполните:

x[diff(x$speed)<30,]
    Name age height speed
2   Alan  14   1.40    75
3 Hector  15   1.25    80
4    Ana  11   1.02    81
0 голосов
/ 07 марта 2020

в следующий раз, когда вы опубликуете sh, здесь полезно разместить некоторую информацию о тойдах, как показано ниже:

rm(list=ls())
#### Toy data ###
dfnames<-c("Name","age","height","speed")
size<-20 # number of rows
name<-LETTERS[1:size]
age<-sample(20:26,size,replace=T)
height<-sample(160:180,size,replace=T)
speed<-sample(0:60,size,replace=T)
df<-cbind.data.frame(name,age,height,speed)

Решение:

for(i in 1:nrow(df)-1){
df[i,"test"]<-(df[i+1,"speed"]-df[i,"speed"])<30
}
df[nrow(df),"test"]<-"last_row"
df<-df[df[,"test"]!=F,]
...