2014-02-14 3 views
0

Я хотел бы найти все значения в моем data frame, чтобы увидеть, если есть бесконечное значение там, потому что, когда я запускаю функцию я получаю эту ошибки:R, поиск бесконечного значения в кадре данных

Error in optim(apply(X, 2, median, na.rm = TRUE), fn = medfun, gr = dmedfun, : 
    non-finite value supplied by optim 

дополнительно:

Warning message: 
In betadisper(d, rep(1, ncol(as.matrix(d)))) : 
    Missing observations due to 'd' removed. 

у меня есть огромный файл, и это происходит только для некоторых строк, но я понятия не имею, почему?

Благодаря

+1

Вы можете проверить бесконечность с помощью 'is.infinite'. Однако, я не думаю, что ваша проблема - это бесконечные значения в ваших данных. Но без воспроизводимого примера трудно дать лучший совет. – Roland

+0

Обратите внимание, что я отбросил ваши изменения. Вы можете добавить свой вопрос, но вы не должны его полностью изменять. – Roland

+0

Вы должны [предоставить воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example), чтобы люди могли помочь с вашей проблемой. – nico

ответ

1

Как об этом с dplyr: Очевидно, что в этом случае он будет работать, только если числа положительны, но вы можете настроить его, если ваши данные сложнее:

df<-read.table(header=F,text="name1 2 2 
name2 1 0 
name2 0 2 
name3 0 2 
name3 0 1") 

require(dplyr) #for aggregation 

    group_by(df,V1) %.%   # with each subset of V1 (col 1) 
    summarise(prod=sum(V2)*sum(V3)) %.% # calculate prod - 0 if either column sums to 0 
    filter(prod!=0) %.% select(V1) %.%  # this selects the rows where prod !=0, and the V1 col 
    inner_join(df)    # join to original df as a filter 

    V1 V2 V3 
1 name1 2 2 
2 name2 1 0 
3 name2 0 2 

Или это с data.table

require(data.table)  # prereq 
merge(df,    # merge the data frame 
data.table(df,"V1")[,list(prod=prod(colSums(.SD))),by="V1"][prod!=0,] # this sums all columns except the "by" key, and filters 
)[,1:ncol(df)]   # this just chops the "prod" column off the end 
+0

Большое спасибо Troy – sepehr

+0

Если есть много столбцов, как следует писать компактнее? – sepehr

+0

@sepehr Я думаю с 'data.table', если вы хотите, чтобы он был более гибким - см. Выше. Если есть столбцы, которые вы хотите исключить из вычисления, вы можете сделать это, применив фильтр в вызове, например. 'Data.table (DF [, 1: 3], "V1")' – Troy

Смежные вопросы