Kristi Glover
2015-Oct-13 00:44 UTC
[R] 3D matrix columns messed up _ looking for your help
Hi Jim, Thank you very much for your suggestions. It seems very easy but it is frustrating as it did not work me. with creating factors and rearranging the columns, still z value (site) did change. for example Tag site DATE a1 2C7 t1 a1 ENL t3 a1 ENM t2 ENL is supposed to be assigned for the period t3. ENM should be assigned in t2, but using the code, the table gave wrong information as the z value (site) did not move to the corresponding column. ENL is in t2, ENM is inn t3 coumns, which is wrong.> tmp1t1 t2 t3 a1 "2C7" "ENL" "ENM" I have included the code if any one help me to solve the problem. This is a just example, I have a very big data set so that I could not check it manually therefore, I just checked few rows but it did not work. Your help is highly appreciated. Here is the example A<-structure(list(Tag = structure(c(1L, 1L, 1L), .Label = "a1", class = "factor"), site = structure(1:3, .Label = c("2C7", "ENL", "ENM"), class = "factor"), DATE = structure(c(1L, 3L, 2L), .Label = c("t1", "t2", "t3" ), class = "factor"), date = structure(c(1L, 3L, 2L), .Label = c("t1", "t2", "t3"), class = "factor")), .Names = c("Tag", "site", "DATE", "date"), row.names = c(NA, -3L), class = "data.frame") A$date<-factor(A$DATE, levels=c("t1","t2","t3")) tmp <- split(A, A$Tag) head(tmp) tail(tmp) tmp1 <- do.call(rbind, lapply(tmp, function(x){ tb <- table(A$date) idx <- which(tb>0) tb1 <- replace(tb, idx, as.character(A$site)) })) tmp1 ________________________________ From: Jim Lemon <drjimlemon at gmail.com> Sent: October 12, 2015 4:22 AM To: Kristi Glover Cc: R-help Subject: Re: [R] 3D matrix columns messed up Hi Kristi, The first part is relatively easy: # change first line to x$time<-factor(x$time,levels=c("t1","t2","t3","t4","t10","t21")) As you have specified "site" as the second element in "x", not the third, perhaps you just want: x<-structure(list(vs = structure(c(1L, 1L, 2L, 3L, 4L, 2L, 3L, 1L, 1L), .Label = c("vs1", "vs2", "vs3", "vs4"), class = "factor"), time = structure(c(1L, 3L, 5L, 1L, 5L, 1L, 6L, 2L, 4L), .Label = c("t1", "t10", "t2", "t21", "t3", "t4"), class = "factor")), site = structure(c(1L, 2L, 3L, 1L, 3L, 1L, 3L, 1L, 2L), .Label = c("A", "B", "D"), class = "factor"), .Names = c("vs", "time", "site"), class = "data.frame", row.names = c(NA, -9L)) Jim On Mon, Oct 12, 2015 at 7:41 PM, Kristi Glover <kristi.glover at hotmail.com<mailto:kristi.glover at hotmail.com>> wrote: Hi R Users, I was trying to make a matrix with three variables (x,y, z), but y variable (columns) names did not stay in its sequential order, t1,t2,t3,---t21; rather the matrix columns automatically appeared as a t1,t10, t2,t20 etc. Besides these, z value (sites) did not come in the right place (meaning in right columns name). I am wondering how I can make the matrix with the sequential order with right z value (site). I tried it several ways but did not work. One of the examples I used is given here. Would you mind to give me a mints? x<-structure(list(vs = structure(c(1L, 1L, 2L, 3L, 4L, 2L, 3L, 1L, 1L), .Label = c("vs1", "vs2", "vs3", "vs4"), class = "factor"), site = structure(c(1L, 2L, 3L, 1L, 3L, 1L, 3L, 1L, 2L), .Label = c("A", "B", "D"), class = "factor"), time = structure(c(1L, 3L, 5L, 1L, 5L, 1L, 6L, 2L, 4L), .Label = c("t1", "t10", "t2", "t21", "t3", "t4"), class = "factor")), .Names = c("vs", "site", "time"), class = "data.frame", row.names = c(NA, -9L)) x$time<-factor(x$time) tmp <- split(x, x$vs) tmp1 <- do.call(rbind, lapply(tmp, function(x){ tb <- table(x$time) idx <- which(tb>0) tb1 <- replace(tb, idx, as.character(x$site)) })) tmp1 ## I want the z (site) in respective columns. ______________________________________________ R-help at r-project.org<mailto:R-help at r-project.org> mailing list -- To UNSUBSCRIBE and more, see 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. [[alternative HTML version deleted]]
Hi Kristi, This is a bit hard to follow, but I'll try. As you are replacing the numeric values of the intermediate table with the character values of the factor A$date, it looks to me as though the answer is as it should be. 2 -> ENL, 3 -> ENM. I suspect that the solution is not difficult, but I can't quite make out what you are trying to accomplish. Jim On Tue, Oct 13, 2015 at 11:44 AM, Kristi Glover <kristi.glover at hotmail.com> wrote:> Hi Jim, > > Thank you very much for your suggestions. It seems very easy but it is > frustrating as it did not work me. with creating factors and rearranging > the columns, still z value (site) did change. > > for example > > Tag site DATE > a1 2C7 t1 > a1 ENL t3 > a1 ENM t2 > > ENL is supposed to be assigned for the period t3. ENM should be assigned > in t2, but using the code, the table gave wrong information as the z value > (site) did not move to the corresponding column. ENL is in t2, ENM is inn > t3 coumns, which is wrong. > > > tmp1 > t1 t2 t3 > a1 "2C7" "ENL" "ENM" > > I have included the code if any one help me to solve the problem. This is > a just example, I have a very big data set so that I could not check > it manually therefore, I just checked few rows but it did not work. Your > help is highly appreciated. > > > Here is the example > > A<-structure(list(Tag = structure(c(1L, 1L, 1L), .Label = "a1", class > "factor"), > site = structure(1:3, .Label = c("2C7", "ENL", "ENM"), class > "factor"), > DATE = structure(c(1L, 3L, 2L), .Label = c("t1", "t2", "t3" > ), class = "factor"), date = structure(c(1L, 3L, 2L), .Label = c("t1", > "t2", "t3"), class = "factor")), .Names = c("Tag", "site", > "DATE", "date"), row.names = c(NA, -3L), class = "data.frame") > > A$date<-factor(A$DATE, levels=c("t1","t2","t3")) > tmp <- split(A, A$Tag) > head(tmp) > tail(tmp) > tmp1 <- do.call(rbind, lapply(tmp, function(x){ > tb <- table(A$date) > idx <- which(tb>0) > tb1 <- replace(tb, idx, as.character(A$site)) > })) > > tmp1 > > > > > > ------------------------------ > *From:* Jim Lemon <drjimlemon at gmail.com> > *Sent:* October 12, 2015 4:22 AM > *To:* Kristi Glover > *Cc:* R-help > *Subject:* Re: [R] 3D matrix columns messed up > > Hi Kristi, > The first part is relatively easy: > > # change first line to > x$time<-factor(x$time,levels=c("t1","t2","t3","t4","t10","t21")) > > As you have specified "site" as the second element in "x", not the third, > perhaps you just want: > > x<-structure(list(vs = structure(c(1L, 1L, 2L, 3L, 4L, 2L, 3L, 1L, 1L), > .Label = c("vs1", "vs2", "vs3", "vs4"), class = "factor"), > time = structure(c(1L, 3L, 5L, 1L, 5L, 1L, 6L, 2L, 4L), > .Label = c("t1", "t10", "t2", "t21", "t3", "t4"), class = "factor")), > site = structure(c(1L, 2L, 3L, 1L, 3L, 1L, 3L, 1L, 2L), > .Label = c("A", "B", "D"), class = "factor"), > .Names = c("vs", "time", "site"), class = "data.frame", > row.names = c(NA, -9L)) > > Jim > > On Mon, Oct 12, 2015 at 7:41 PM, Kristi Glover <kristi.glover at hotmail.com> > wrote: > >> Hi R Users, >> I was trying to make a matrix with three variables (x,y, z), but y >> variable (columns) names did not stay in its sequential order, >> t1,t2,t3,---t21; rather the matrix columns automatically appeared as >> a t1,t10, t2,t20 etc. Besides these, z value (sites) did not come in the >> right place (meaning in right columns name). I am wondering how I can make >> the matrix with the sequential order with right z value (site). I tried it >> several ways but did not work. One of the examples I used is given here. >> Would you mind to give me a mints? >> >> x<-structure(list(vs = structure(c(1L, 1L, 2L, 3L, 4L, 2L, 3L, 1L, >> 1L), .Label = c("vs1", "vs2", "vs3", "vs4"), class = "factor"), >> site = structure(c(1L, 2L, 3L, 1L, 3L, 1L, 3L, 1L, 2L), .Label >> c("A", >> "B", "D"), class = "factor"), time = structure(c(1L, 3L, >> 5L, 1L, 5L, 1L, 6L, 2L, 4L), .Label = c("t1", "t10", "t2", >> "t21", "t3", "t4"), class = "factor")), .Names = c("vs", >> "site", "time"), class = "data.frame", row.names = c(NA, -9L)) >> >> >> x$time<-factor(x$time) >> tmp <- split(x, x$vs) >> tmp1 <- do.call(rbind, lapply(tmp, function(x){ >> tb <- table(x$time) >> idx <- which(tb>0) >> tb1 <- replace(tb, idx, as.character(x$site)) >> })) >> >> >> tmp1 >> >> >> ## I want the z (site) in respective columns. >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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. >> > >[[alternative HTML version deleted]]
Kristi Glover
2015-Oct-13 16:17 UTC
[R] 3D matrix columns messed up _ looking for your help
Hi Jim,
Thank you very much for the message. Sorry for the email that was not clear.
Yes, you are right, in A$date, should be t2> ENM, t3> ENL. but using the
code it gave t2>ENL, t3>ENM. I am struggling to fix it. If the data set
was small, I could do it manually.
would you mind to try this example?
Here is the example
A<-structure(list(Tag = structure(c(1L, 1L, 1L), .Label = "a1",
class = "factor"),
site = structure(1:3, .Label = c("2C7", "ENL",
"ENM"), class = "factor"),
DATE = structure(c(1L, 3L, 2L), .Label = c("t1", "t2",
"t3"
), class = "factor"), date = structure(c(1L, 3L, 2L), .Label =
c("t1",
"t2", "t3"), class = "factor")), .Names =
c("Tag", "site",
"DATE", "date"), row.names = c(NA, -3L), class =
"data.frame")
A$date<-factor(A$DATE,
levels=c("t1","t2","t3"))
tmp <- split(A, A$Tag)
head(tmp)
tail(tmp)
tmp1 <- do.call(rbind, lapply(tmp, function(x){
tb <- table(A$date)
idx <- which(tb>0)
tb1 <- replace(tb, idx, as.character(A$site))
}))
tmp1
========
________________________________
From: Jim Lemon <drjimlemon at gmail.com>
Sent: October 13, 2015 4:24 AM
To: Kristi Glover
Cc: R-help
Subject: Re: [R] 3D matrix columns messed up _ looking for your help
Hi Kristi,
This is a bit hard to follow, but I'll try. As you are replacing the numeric
values of the intermediate table with the character values of the factor A$date,
it looks to me as though the answer is as it should be. 2 -> ENL, 3 ->
ENM. I suspect that the solution is not difficult, but I can't quite make
out what you are trying to accomplish.
Jim
On Tue, Oct 13, 2015 at 11:44 AM, Kristi Glover <kristi.glover at
hotmail.com<mailto:kristi.glover at hotmail.com>> wrote:
Hi Jim,
Thank you very much for your suggestions. It seems very easy but it is
frustrating as it did not work me. with creating factors and rearranging the
columns, still z value (site) did change.
for example
Tag site DATE
a1 2C7 t1
a1 ENL t3
a1 ENM t2
ENL is supposed to be assigned for the period t3. ENM should be assigned in t2,
but using the code, the table gave wrong information as the z value (site) did
not move to the corresponding column. ENL is in t2, ENM is inn t3 coumns, which
is wrong.
> tmp1
t1 t2 t3
a1 "2C7" "ENL" "ENM"
I have included the code if any one help me to solve the problem. This is a just
example, I have a very big data set so that I could not check it manually
therefore, I just checked few rows but it did not work. Your help is highly
appreciated.
Here is the example
A<-structure(list(Tag = structure(c(1L, 1L, 1L), .Label = "a1",
class = "factor"),
site = structure(1:3, .Label = c("2C7", "ENL",
"ENM"), class = "factor"),
DATE = structure(c(1L, 3L, 2L), .Label = c("t1", "t2",
"t3"
), class = "factor"), date = structure(c(1L, 3L, 2L), .Label =
c("t1",
"t2", "t3"), class = "factor")), .Names =
c("Tag", "site",
"DATE", "date"), row.names = c(NA, -3L), class =
"data.frame")
A$date<-factor(A$DATE,
levels=c("t1","t2","t3"))
tmp <- split(A, A$Tag)
head(tmp)
tail(tmp)
tmp1 <- do.call(rbind, lapply(tmp, function(x){
tb <- table(A$date)
idx <- which(tb>0)
tb1 <- replace(tb, idx, as.character(A$site))
}))
tmp1
________________________________
From: Jim Lemon <drjimlemon at gmail.com<mailto:drjimlemon at
gmail.com>>
Sent: October 12, 2015 4:22 AM
To: Kristi Glover
Cc: R-help
Subject: Re: [R] 3D matrix columns messed up
Hi Kristi,
The first part is relatively easy:
# change first line to
x$time<-factor(x$time,levels=c("t1","t2","t3","t4","t10","t21"))
As you have specified "site" as the second element in "x",
not the third, perhaps you just want:
x<-structure(list(vs = structure(c(1L, 1L, 2L, 3L, 4L, 2L, 3L, 1L, 1L),
.Label = c("vs1", "vs2", "vs3", "vs4"),
class = "factor"),
time = structure(c(1L, 3L, 5L, 1L, 5L, 1L, 6L, 2L, 4L),
.Label = c("t1", "t10", "t2", "t21",
"t3", "t4"), class = "factor")),
site = structure(c(1L, 2L, 3L, 1L, 3L, 1L, 3L, 1L, 2L),
.Label = c("A", "B", "D"), class =
"factor"),
.Names = c("vs", "time", "site"), class =
"data.frame",
row.names = c(NA, -9L))
Jim
On Mon, Oct 12, 2015 at 7:41 PM, Kristi Glover <kristi.glover at
hotmail.com<mailto:kristi.glover at hotmail.com>> wrote:
Hi R Users,
I was trying to make a matrix with three variables (x,y, z), but y variable
(columns) names did not stay in its sequential order, t1,t2,t3,---t21; rather
the matrix columns automatically appeared as a t1,t10, t2,t20 etc. Besides
these, z value (sites) did not come in the right place (meaning in right columns
name). I am wondering how I can make the matrix with the sequential order with
right z value (site). I tried it several ways but did not work. One of the
examples I used is given here. Would you mind to give me a mints?
x<-structure(list(vs = structure(c(1L, 1L, 2L, 3L, 4L, 2L, 3L, 1L,
1L), .Label = c("vs1", "vs2", "vs3",
"vs4"), class = "factor"),
site = structure(c(1L, 2L, 3L, 1L, 3L, 1L, 3L, 1L, 2L), .Label =
c("A",
"B", "D"), class = "factor"), time =
structure(c(1L, 3L,
5L, 1L, 5L, 1L, 6L, 2L, 4L), .Label = c("t1", "t10",
"t2",
"t21", "t3", "t4"), class =
"factor")), .Names = c("vs",
"site", "time"), class = "data.frame", row.names =
c(NA, -9L))
x$time<-factor(x$time)
tmp <- split(x, x$vs)
tmp1 <- do.call(rbind, lapply(tmp, function(x){
tb <- table(x$time)
idx <- which(tb>0)
tb1 <- replace(tb, idx, as.character(x$site))
}))
tmp1
## I want the z (site) in respective columns.
______________________________________________
R-help at r-project.org<mailto:R-help at r-project.org> mailing list -- To
UNSUBSCRIBE and more, see
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.
[[alternative HTML version deleted]]