A. M
A. M

Reputation: 23

I would like to extract the columns of each element of a list in R

I'd to extract the 3rd column (c) of each element in this list and store the result. (I've listed the data frame in this example so that it looks like the long list of lists I have):

set.seed(59)
df<- data.frame(a=c(1,4,5,2),b=c(9,2,7,4),c=c(5,2,9,4))
df1<- data.frame(df,2*df)
df1<- list(df,2*df)

[[1]]
  a b c
1 1 9 5
2 4 2 2
3 5 7 9
4 2 4 4

[[2]]
   a  b  c
1  2 18 10
2  8  4  4
3 10 14 18
4  4  8  8

Seems fairly simple for just one element

> df1[[1]]["c"]
 c
1 5
2 2
3 9
4 4
> df1["c"] # cries again
[[1]]
NULL

All I want to see is:

 [[1]]
   c
 1 5
 2 2
 3 9
 4 4
 [[2]]
   c
 1 10
 2 4
 3 18
 4 8
 

Thanks in advance

Upvotes: 1

Views: 444

Answers (1)

Ronak Shah
Ronak Shah

Reputation: 388982

Use lapply :

data <- lapply(df1, function(x) x[, 'c', drop = FALSE])
data
#[[1]]
#  c
#1 5
#2 2
#3 9
#4 4

#[[2]]
#   c
#1 10
#2  4
#3 18
#4  8

When you subset one column dataframe it coerces it to lowest possible dimension which is a vector in this case. drop = FALSE is needed to keep it as a dataframe.

Upvotes: 2

Related Questions