使用dplyr删除NaN

Ril*_*n42 5 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
Run Code Online (Sandbox Code Playgroud)

目标:

      A    B  C  high low
high .33 .00 .67  0    0
low  .67 .33  .00 0    0
Run Code Online (Sandbox Code Playgroud)

小智 5

似乎 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
Run Code Online (Sandbox Code Playgroud)