On Aug 9, 2012, at 2:43 PM, David L Carlson wrote:
You have not defined a data frame since data frames cannot contain
lists,
Not true:
> dput(a)
structure(list(b = c(1988, 1989),
c = list(c(1985, 1982, 1984),
c(1988, 1980))), .Names = c("b", "c"))
> ab <- data.frame(a$b)
> ab
a.b
1 1988
2 1989
> ab$cb <- a$c
> ab
a.b cb
1 1988 1985, 1982, 1984
2 1989 1988, 1980
> str(ab)
'data.frame': 2 obs. of 2 variables:
$ a.b: num 1988 1989
$ cb :List of 2
..$ : num 1985 1982 1984
..$ : num 1988 1980
But it seems unlikely that the OP's "a" object is a dataframe since
the console eval-print loop would not display a dataframe in that
manner.
At any rate with the ab dataframe:
> for( i in 1:NROW(ab) ) print( ab$a.b[i] - ab$cb[[i]] )
[1] 3 6 4
[1] 1 9
The OP should note the need to use '[[' on a list-object to get
commensurate classes to pass to the '-' operator.
--
david.
but lists can contain data frames so you are asking about how to
process a
list. I'm changing your object names to a, b, and d because c() is the
concatenation function and it can cause all kinds of problems to use
it as
an object name.
a <- list(b=c(1988, 1989), d=list(c(1985, 1982, 1984), c(1988,
1980)))
a
$b
[1] 1988 1989
$d
$d[[1]]
[1] 1985 1982 1984
$d[[2]]
[1] 1988 1980
a$b; a[[1]] # Two ways to refer to the first element of the list
[1] 1988 1989
[1] 1988 1989
a$d; a[[2]] # Two ways to refer to the second element of the list
[[1]]
[1] 1985 1982 1984
[[2]]
[1] 1988 1980
[[1]]
[1] 1985 1982 1984
[[2]]
[1] 1988 1980
a[[2]][[1]]; a$d[[1]] # Two ways to refer to the 1st element of the
2nd
element
[1] 1985 1982 1984
[1] 1985 1982 1984
a[[2]][[2]]; a$d[[2]] # Two ways to refer to the 2nd element of the
2nd
element
[1] 1988 1980
[1] 1988 1980
a$new <- sapply(1:2, function(i) a$b[i] - a$d[[i]])
a$new
[[1]]
[1] 3 6 4
[[2]]
[1] 1 9
You can do all this with a data.frame if you think about it
differently:
a <- data.frame(year = c(1988, 1989), group = c("G1988", "G1989"))
b <- data.frame(group = c(rep("G1988", 3), rep("G1989", 2)),
d = c(1985, 1982, 1984, 1988, 1980))
ab <- merge(a, b)
ab <- data.frame(ab, diff=ab$year-ab$d)
new <- split(ab$diff, ab$group)
new
$G1988
[1] 3 6 4
$G1989
[1] 1 9
----------------------------------------------
David L Carlson
Associate Professor of Anthropology
Texas A&M University
College Station, TX 77843-4352
-----Original Message-----
From: r-help-boun...@r-project.org [mailto:r-help-bounces@r-
project.org] On Behalf Of jimi adams
Sent: Thursday, August 09, 2012 3:43 PM
To: r-help@r-project.org
Subject: [R] indexing in data frames
I'm still not fully understanding exactly how R is handling data
frames, but am getting closer. Any help with this one will likely
go a
long way in getting me there. Let's say I have a data frame, let's
call
it "a". Within that data frame i have two variables, let's call them
"b" and "c", where "b" is a single numeric value per observation,
while
"c" is a LIST of numeric values. What I want to be able to do is
perform an operation on each element in "c" by the single element in
"b".
So, for example, if I wanted to subtract each element in "c" from the
scalar in "b". For example, if i had
a$b
[1] 1988
[2] 1989
.
&
a$c
[[1]]
[1] 1985 1982 1984
[[2]]
[1] 1988 1980
.
I'm looking for a result of:
a$new
[[1]]
[1] 3 6 4
[[2]]
[1] 1 9
.
I've tried a few different things, none of which have the desired
result. Any help appreciated.
thanks!
jimi adams
Assistant Professor
Department of Sociology
American University
e: jad...@american.edu
w: jimiadams.com
______________________________________________
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.
______________________________________________
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.
David Winsemius, MD
Alameda, CA, USA
______________________________________________
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.