Hi Henrik and Arun,
I now understand the script you provided. Very smart solution I think.
I wonder, however, if there is an alternative way as to count the last
number in a row?.
For instance, considering the following dataframe
dat1<-read.table(text="
Lat Lon x1 x2 x3
01 12 .4 .5 .6
01 12 .2 .3 NA
01 11 .1 NA NA
01 10 NA NA NA
",sep="",header=TRUE)
the last value (from left to right) should be:
.6
.3
.1
NA
NAs are always consecutive once they appear.
Thanks again,
Camilo
Camilo Mora, Ph.D.
Department of Geography, University of Hawaii
Currently available in Colombia
Phone: Country code: 57
Provider code: 313
Phone 776 2282
From the USA or Canada you have to dial 011 57 313 776 2282
http://www.soc.hawaii.edu/mora/
Quoting arun <smartpink...@yahoo.com>:
Hi Henrik,
Thanks for testing it to a different dataset. I didn't test it at
that time to multiple conditions. Probably, apply is a better method.
Anyway, you can still get the same result by doing this:
dat1<-read.table(text="
Lat Lon x1 x2 x3
01 10 NA NA .1
01 11 .4 NA .3
01 12 NA .5 .6
",sep="",header=TRUE)
dat2<-data.frame(t(dat1[,3:5]))
dat3<-data.frame(dat1,NewColumn=unlist(lapply(dat2,function(x)
x[!is.na(x)][1])))
row.names(dat3)<-1:nrow(dat3)
dat3
# Lat Lon x1 x2 x3 NewColumn
#1 1 10 NA NA 0.1 0.1
#2 1 11 0.4 NA 0.3 0.4
#3 1 12 NA 0.5 0.6 0.5
#Now, to a slightly different dataset
dat1<-read.table(text="
Lat Lon x1 x2 x3
01 10 NA NA NA
01 11 NA NA .3
01 12 NA .6 NA
",sep="",header=TRUE)
dat2<-data.frame(t(dat1[,3:5]))
dat3<-data.frame(dat1,NewColumn=unlist(lapply(dat2,function(x)
x[!is.na(x)][1])))
row.names(dat3)<-1:nrow(dat3)
dat3
#Lat Lon x1 x2 x3 NewColumn
#1 1 10 NA NA NA NA
#2 1 11 NA NA 0.3 0.3
#3 1 12 NA 0.6 NA 0.6
I hope this works well.
A.K.
----- Original Message -----
From: Henrik Singmann <henrik.singm...@psychologie.uni-freiburg.de>
To: arun <smartpink...@yahoo.com>
Cc: Camilo Mora <cm...@dal.ca>; R help <r-help@r-project.org>
Sent: Tuesday, July 24, 2012 10:18 AM
Subject: Re: First value in a row
Hi,
As Arun's idea was also my first idea let me pinpoint the problem of
this solution.
It only works if the data in question (i.e., columns x1 to x3)
follow the pattern of the example data insofar that the NAs form a
triangle like structure. This is so because it loops over columns
instead of rows and takes advantage of the triangle NA structure.
For example, slightly changing the data leads to a result that does
not follow the description of Camilo seem to want:
dat1<-read.table(text="
Lat Lon x1 x2 x3
01 10 NA NA .1
01 11 .4 NA .3
01 12 NA .5 .6
",sep="",header=TRUE)
# correct answer from description would be .1, .4, .5
# arun's solution:
data.frame(dat1,NewColumn=rev(unlist(lapply(dat1[,3:5],function(x)
x[!is.na(x)][1]))))
# x3 x2 x1
# 0.1 0.5 0.4
# my solution:
apply(dat1[,-(1:2)], 1, function(x) x[!is.na(x)][1])
# [1] 0.1 0.4 0.5
So the question is, what you want and how the data looks.
Cheers,
Henrik
Am 24.07.2012 14:27, schrieb arun:
Hi,
Try this:
dat1<-read.table(text="
Lat Lon x1 x2 x3
01 10 NA NA .1
01 11 NA .2 .3
01 12 .4 .5 .6
",sep="",header=TRUE)
dat2<-dat1[,3:5]
dat3<-data.frame(dat1,NewColumn=rev(unlist(lapply(dat2,function(x)
x[!is.na(x)][1]))))
row.names(dat3)<-1:nrow(dat3)
dat3
Lat Lon x1 x2 x3 NewColumn
1 1 10 NA NA 0.1 0.1
2 1 11 NA 0.2 0.3 0.2
3 1 12 0.4 0.5 0.6 0.4
A.K.
----- Original Message -----
From: Camilo Mora <cm...@dal.ca>
To: r-help@r-project.org
Cc:
Sent: Tuesday, July 24, 2012 2:48 AM
Subject: [R] First value in a row
Hi.
This is likely a trivial problem but have not found a solution.
Imagine the following dataframe:
Lat Lon x1 x2 x3
01 10 NA NA .1
01 11 NA .2 .3
01 12 .4 .5 .6
I want to generate another column that consist of the first value
in each row from columns x1 to x3. That is
NewColumn
.1
.2
.4
Any input greatly appreciated,
Thanks,
Camilo
Camilo Mora, Ph.D.
Department of Geography, University of Hawaii
______________________________________________
R-help@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.
--
Dipl. Psych. Henrik Singmann
PhD Student
Albert-Ludwigs-Universität Freiburg, Germany
http://www.psychologie.uni-freiburg.de/Members/singmann
______________________________________________
R-help@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.