Sally Zhen
2011-Oct-20 12:52 UTC
[R] Constructing the transition pair using loop function and paste()
Hi all,
I'd like to thank those who helped me with my previous loop function
question with agents/events. I have solved the problem with the advice from
this community.
I have now moved on to the next step, which requires me to find all the
transition pair within an event. A sample data and the R commands I've
written are as follow:
x <-
c('A','D','F','H','N','A','C','H','F','D','F','F','H','K','G','D','D','B','N','K','O','V','S','S','F','H','J','U','K','T','H','S','R','G','S','R','R','G','D','B','G','F','G','N','H','H','K','L','B','X','C','V','S','F','X','G','T','H','H','H','R','A','E','D','C')
y <- c(rep(0293,8), rep(0498,6), rep(6847,10), rep(6209,4), rep(8562,13),
rep(4596,6), rep(2857,2), rep(6178,3), rep(6018,5), rep(5629,4),
rep(7535,4))
mydata <- as.data.frame(cbind(x,y))
names(mydata) <- c('actions', 'agents')
mydata
for (i in 1:length(unique(mydata$agents))){ # decompose the data
frame by agents
agent.i <- mydata[mydata$agents == (unique(mydata$agents))[i], ]
transition <- vector('list', length(unique(mydata$agents))) #
create
a list to hold the outputs
transit.i <- c()
for (j in 1:length(agent.i$actions)-1){
transit.i[j] <- paste(agent.i$actions[j], agent.i$actions[j+1], sep =
'')}
# for each subset of each agent, perform the 'pairing'
transition[[i]] <- transit.i}
transition
The actions are ordered, so what I need to do is just to paste each action
to the next one to form a pair.
My attempt only produced the desired result for the last agent:
[[1]]
NULL
[[2]]
NULL
[[3]]
NULL
[[4]]
NULL
[[5]]
NULL
[[6]]
NULL
[[7]]
NULL
[[8]]
NULL
[[9]]
NULL
[[10]]
NULL
[[11]]
[1] "AE" "ED" "DC"
Is there any way to avoid using 2-level loop function, although to me it's
the most intuitive method? Any pointer would be greatly appreciated!
Regards,
Sally
[[alternative HTML version deleted]]
jim holtman
2011-Oct-20 14:06 UTC
[R] Constructing the transition pair using loop function and paste()
try this: You were redfining 'transition' within the loop
x <-
c('A','D','F','H','N','A','C','H','F','D','F','F','H','K','G','D','D','B','N','K','O','V','S','S','F','H','J','U','K','T','H','S','R','G','S','R','R','G','D','B','G','F','G','N','H','H','K','L','B','X','C','V','S','F','X','G','T','H','H','H','R','A','E','D','C')
y <- c(rep(0293,8), rep(0498,6), rep(6847,10), rep(6209,4), rep(8562,13),
rep(4596,6), rep(2857,2), rep(6178,3), rep(6018,5), rep(5629,4),
rep(7535,4))
mydata <- as.data.frame(cbind(x,y))
names(mydata) <- c('actions', 'agents')
mydata
transition <- vector('list', length(unique(mydata$agents))) #
create a list to hold the outputs
for (i in 1:length(unique(mydata$agents))){ # decompose the
data frame by agents
agent.i <- mydata[mydata$agents == (unique(mydata$agents))[i], ]
transit.i <- c()
for (j in 1:length(agent.i$actions)-1){
transit.i[j] <- paste(agent.i$actions[j],
agent.i$actions[j+1], sep = '')
}
# for each subset of each agent, perform the 'pairing'
transition[[i]] <- transit.i
}
transition
On Thu, Oct 20, 2011 at 8:52 AM, Sally Zhen <saliluna at gmail.com>
wrote:> Hi all,
>
>
> I'd like to thank those who helped me with my previous loop function
> question with agents/events. I have solved the problem with the advice from
> this community.
>
> I have now moved on to the next step, which requires me to find all the
> transition pair within an event. A sample data and the R commands I've
> written are as follow:
>
> x <-
>
c('A','D','F','H','N','A','C','H','F','D','F','F','H','K','G','D','D','B','N','K','O','V','S','S','F','H','J','U','K','T','H','S','R','G','S','R','R','G','D','B','G','F','G','N','H','H','K','L','B','X','C','V','S','F','X','G','T','H','H','H','R','A','E','D','C')
> y <- c(rep(0293,8), rep(0498,6), rep(6847,10), rep(6209,4),
rep(8562,13),
> rep(4596,6), rep(2857,2), rep(6178,3), rep(6018,5), rep(5629,4),
> rep(7535,4))
> mydata <- as.data.frame(cbind(x,y))
> names(mydata) <- c('actions', 'agents')
> mydata
>
>
> for (i in 1:length(unique(mydata$agents))){ ? ? ? ? # decompose the data
> frame by agents
> agent.i <- mydata[mydata$agents == (unique(mydata$agents))[i], ]
> transition <- vector('list', length(unique(mydata$agents))) ? ?
? ?# create
> a list to hold the outputs
> transit.i <- c()
> for (j in 1:length(agent.i$actions)-1){
> transit.i[j] <- paste(agent.i$actions[j], agent.i$actions[j+1], sep =
'')}
> ? # for each subset of each agent, perform the 'pairing'
> transition[[i]] <- transit.i}
> transition
>
>
> The actions are ordered, so what I need to do is just to paste each action
> to the next one to form a pair.
> My attempt only produced the desired result for the last agent:
>
> [[1]]
> NULL
>
> [[2]]
> NULL
>
> [[3]]
> NULL
>
> [[4]]
> NULL
>
> [[5]]
> NULL
>
> [[6]]
> NULL
>
> [[7]]
> NULL
>
> [[8]]
> NULL
>
> [[9]]
> NULL
>
> [[10]]
> NULL
>
> [[11]]
> [1] "AE" "ED" "DC"
>
>
> Is there any way to avoid using 2-level loop function, although to me
it's
> the most intuitive method? Any pointer would be greatly appreciated!
>
> Regards,
> Sally
>
> ? ? ? ?[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
--
Jim Holtman
Data Munger Guru
What is the problem that you are trying to solve?