[R] Constructing the transition pair using loop function and paste()

jim holtman jholtman at gmail.com
Thu Oct 20 16:17:55 CEST 2011


Here is another way of getting the lists

> newtrans <- lapply(split(mydata, mydata$agents), function(.agent){
+     .all <- paste(.agent$actions, collapse = '')
+     .indx <- embed(seq(nchar(.all)), 2)
+     substring(.all, .indx[, 2], .indx[, 1])
+ })
>
> newtrans
$`2857`
[1] "LB"

$`293`
[1] "AD" "DF" "FH" "HN" "NA" "AC" "CH"

$`4596`
[1] "FG" "GN" "NH" "HH" "HK"

$`498`
[1] "FD" "DF" "FF" "FH" "HK"

$`5629`
[1] "HH" "HH" "HR"

$`6018`
[1] "SF" "FX" "XG" "GT"

$`6178`
[1] "XC" "CV"

$`6209`
[1] "FH" "HJ" "JU"

$`6847`
[1] "GD" "DD" "DB" "BN" "NK" "KO" "OV" "VS" "SS"

$`7535`
[1] "AE" "ED" "DC"

$`8562`
 [1] "KT" "TH" "HS" "SR" "RG" "GS" "SR" "RR" "RG" "GD" "DB" "BG"

>

On Thu, Oct 20, 2011 at 10:08 AM, Sally Zhen <saliluna at gmail.com> wrote:
> I got it! Thank you so much Jim!
>
> On 20 October 2011 15:06, jim holtman <jholtman at gmail.com> wrote:
>>
>> 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?
>
>



-- 
Jim Holtman
Data Munger Guru

What is the problem that you are trying to solve?



More information about the R-help mailing list