Я надеюсь создать функцию, в которой она удаляет строку, если значение в столбце B меньше среднего значения для всего столбца.
testing<-function(x){
for(n in x){
if(n < mean(n){
*drop the entire row*
}
Пока я могу заставить R удалить только само значение, но не всю строку, поэтому пример использования этой функции будет
df$columnB <- testing(df$columnB)
поэтому входные данные для самой функции поступают только из одного из столбцов, но внутри функции она должна знать, чтобы удалить всю строку, а не только этот столбец, поэтому просто drop (n) будет недостаточно.
Для проверки использовали следующее:
iris_tibble<-as_tibble(iris)
#all values became NA and message saying "argument is not numeric or logical: returning NA"
testing <- function(x) {
i <- x[,"Sepal.Length"] < mean(x[,"Sepal.Length"])
return( x[!i,] )
}
testing(iris_tibble)
#Goal
testing <- function(x,y){
i <- x[,y] < mean(x[,y])
return( x[!i,] )
}
testing(iris_tibble,"Sepal.Length")
Этого должно хватить:
testing <- function(x, colname) {
i <- x[,colname] < mean(x[,colname,drop=TRUE])
return( x[!i,] )
}
dim( iris )
dim( testing( as_tibble(iris), "Sepal.Length" ) )
## cust roughly half of iris away
вы должны дать ему весь свой data.frame и имя столбца, например.testing(df, "foobar")
, и запечатлеть то, что он воспроизводит.
testing <- function(x, colname) { mean_col = mean(x[,colname,drop=TRUE]) i <- x[,colname] < mean_col*2 return(x[!i,]) }
Jesmean_col = mean(x[,colname,drop=TRUE])
на строку передi <- x[,colname] < mean_col*2
и это все равно будет правильным с точки зрения синтаксиса Jes