使用dplyr去除NaN

时间:2015-12-03 03:53:55

标签: r dplyr

我正在尝试删除NaN值并按row.names排序。我尝试使用dplyr这样做,但我的尝试没有用。有人可以建议一种解决方法吗?

require(markovchain)
data1<-data.frame(dv=rep(c("low","high"),3),iv1=sample(c("A","B","C"),replace=T,6))
markov<-markovchainFit(data1)
markovDF<-as(markov, "data.frame")
library(dplyr)
markovDF%>%filter(rowSums>0)%>%arrange(desc(markovDF[,1]))


> markov
$estimate
             A         B         C high low
A          NaN       NaN       NaN  NaN NaN
B          NaN       NaN       NaN  NaN NaN
C          NaN       NaN       NaN  NaN NaN
high 0.3333333 0.0000000 0.6666667    0   0
low  0.6666667 0.3333333 0.0000000    0   0

目标:

      A    B  C  high low
high .33 .00 .67  0    0
low  .67 .33  .00 0    0

2 个答案:

答案 0 :(得分:3)

似乎nelsonauner的回答改变了row.names属性。由于您希望按row.names进行排序,这似乎是一个问题。

您不需要dplyr来执行此操作:

library(markovchain)
data1 <- data.frame(dv=rep(c("low","high"),3),iv1=sample(c("A","B","C"),replace=T,6))
markov<-markovchainFit(data1)

#Get into dataframe
markov <- as.data.frame(markov$estimate@transitionMatrix)

#Remove rows that contain nans
markov <- markov[complete.cases(markov), ]

#sort by rowname
markov <- markov[order(row.names(markov)),]

             A         B         C high low
high 0.0000000 0.3333333 0.6666667    0   0
low  0.3333333 0.3333333 0.3333333    0   0

答案 1 :(得分:2)

这里有两个问题需要解决。

  1. dplyr旨在对数据帧进行操作,因此我们需要将数据放入数据帧中。您尝试使用markovDF<-as(markov, "data.frame")执行此操作,但我无法使其工作。 (您是否获得了非空数据框?)

  2. 删除特定行中NaN的行(我将使用行A,如果需要,可以将其更改为包含所有行)

    < / LI>

    您可以使用

    解决此问题
    > markov$estimate@transitionMatrix %>% 
        as.data.frame %>% 
        dplyr::filter(!is.na(A)) 
        %>% arrange(-A)
    
    
              A         B         C high low
    1 0.3333333 0.3333333 0.3333333    0   0
    2 0.0000000 0.6666667 0.3333333    0   0