Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中创建转换列_R_Dataframe - Fatal编程技术网

如何在R中创建转换列

如何在R中创建转换列,r,dataframe,R,Dataframe,我在数据框中有一个状态列,我想创建两个新列: 一个是展望下一阶段的变化,一个是回顾前一阶段的状态变化。因此,生成的数据帧如下所示: state coming previous a a-b NA a a-b NA a a-b NA a a-b NA b b-c a-b b b-c a-b b b-c a-b c c-a b-c c

我在数据框中有一个状态列,我想创建两个新列: 一个是展望下一阶段的变化,一个是回顾前一阶段的状态变化。因此,生成的数据帧如下所示:

state coming  previous
  a     a-b     NA
  a     a-b     NA
  a     a-b     NA
  a     a-b     NA
  b     b-c     a-b
  b     b-c     a-b
  b     b-c     a-b
  c     c-a     b-c
  c     c-a     b-c
  c     c-a     b-c
  a     NA      c-a
  a     NA      c-a
或者更好,但现在您只需创建两个过渡列:

state trans1   trans2
  a     a-b     NA
  a     a-b     NA
  a     a-b     NA
  a     a-b     NA
  b     a-b     b-c 
  b     a-b     b-c
  b     a-b     b-c
  c     c-a     b-c
  c     c-a     b-c
  c     c-a     b-c
  a     c-a     NA 
  a     c-a     NA
[编辑]
将名为“1”的状态更改为“c”,因为它令人困惑

让我们给该数据帧命名,比如“inp”。使用
rle
函数构建“状态”序列:

>rle(inp$状态)
游程编码
长度:int[1:4]42
值:chr[1:4]“a”“b”“1”“a”

runinp多亏了DWin的回答,我自己从问题中找到了第二部分的答案。 以下是创建带有transitions列的数据帧的完整代码:

state = rep(c('a','b','c','a'), c(4,3,3,2))
inp=data.frame(state, vals=rnorm(12))
runinps=rle(as.character(inp$state)) # doesn't work without as.character

(rs <- runinps$values)
(ls=runinps$lengths)

(inp$coming <- rep( c( paste( rs[-length(rs)], rs[-1], sep="-"), NA), ls ))
(inp$previous <-rep( c( NA, paste(rs[-length(rs)], rs[-1], sep="-")), ls ))

# Create the first transitions column
(reps=rep(1:(length(ls)/2),each=2))
(ls2=as.vector(tapply(ls , reps, sum)))
seqRs=seq(from=1,to=length(rs),by=2)
(inp$trans <- rep(paste( rs[seqRs], rs[seqRs+1], sep="-"), ls2 ))

# Create the second transitions column
reps=c(reps[-1], max(reps)+1)
(ls2=as.vector(tapply(ls , reps, sum)))
seqRs=seq(from=2,to=length(rs)-1,by=2)
(inp$trans2 <- rep(c(NA, paste( rs[seqRs], rs[seqRs+1], sep="-"), NA), ls2 ))

# some last commands to create one transition column
inp2=subset(inp,!is.na(inp$trans2))
inp2$trans=inp2$trans2
inp=rbind(inp,inp2)
inp$trans2<-NULL
state=rep(c('a','b','c','a'),c(4,3,3,2))
inp=数据帧(状态,VAL=rnorm(12))
runinps=rle(as.character(inp$state))#没有as.character无法工作

(rs事实上,我完全不确定你想做什么。尽管你可能想看看
转换
。你的输入到底是什么,输出应该是什么?1让我不舒服。既然你已经概述了这个概念,你能提供一个真实数据的例子吗?很抱歉混淆了。这是因为我在用睡眠工作数据。在睡眠研究中,我们有5个睡眠阶段:阶段1到3,唤醒阶段和快速眼动睡眠。我想收集从一个睡眠阶段到另一个睡眠阶段的所有转换。我现在已经将这些转换为c。
state = rep(c('a','b','c','a'), c(4,3,3,2))
inp=data.frame(state, vals=rnorm(12))
runinps=rle(as.character(inp$state)) # doesn't work without as.character

(rs <- runinps$values)
(ls=runinps$lengths)

(inp$coming <- rep( c( paste( rs[-length(rs)], rs[-1], sep="-"), NA), ls ))
(inp$previous <-rep( c( NA, paste(rs[-length(rs)], rs[-1], sep="-")), ls ))

# Create the first transitions column
(reps=rep(1:(length(ls)/2),each=2))
(ls2=as.vector(tapply(ls , reps, sum)))
seqRs=seq(from=1,to=length(rs),by=2)
(inp$trans <- rep(paste( rs[seqRs], rs[seqRs+1], sep="-"), ls2 ))

# Create the second transitions column
reps=c(reps[-1], max(reps)+1)
(ls2=as.vector(tapply(ls , reps, sum)))
seqRs=seq(from=2,to=length(rs)-1,by=2)
(inp$trans2 <- rep(c(NA, paste( rs[seqRs], rs[seqRs+1], sep="-"), NA), ls2 ))

# some last commands to create one transition column
inp2=subset(inp,!is.na(inp$trans2))
inp2$trans=inp2$trans2
inp=rbind(inp,inp2)
inp$trans2<-NULL