我正在尝试删除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
答案 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)
这里有两个问题需要解决。
dplyr旨在对数据帧进行操作,因此我们需要将数据放入数据帧中。您尝试使用markovDF<-as(markov, "data.frame")
执行此操作,但我无法使其工作。 (您是否获得了非空数据框?)
删除特定行中NaN
的行(我将使用行A
,如果需要,可以将其更改为包含所有行)
您可以使用
解决此问题> 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