简体   繁体   中英

Keep columns of a data frame based on a data frame

I have a data frame, called df , which contains 4000 values. I have a list of 1000 column numbers , in a data frame called list , which is 1000 rows by 1 column. How can I keep the rows with the numbers in list in the data frame df and throw the rest out. I already tried using:

listv <- as.vector(list)

and then using

dfnew <- df[,listv] 

but I get the error

Error in .subset(x, j) : invalid subscript type 'list'

You're mixing up rows and columns subsetting. Here is a minimal example:

df <- data.frame(matrix(1:21, ncol = 3))
df
#   X1 X2 X3
# 1  1  8 15
# 2  2  9 16
# 3  3 10 17
# 4  4 11 18
# 5  5 12 19
# 6  6 13 20
# 7  7 14 21
list <- data.frame(V1 = c(1, 4, 6))
list
#   V1
# 1  1
# 2  4
# 3  6
df[list[, 1], ]
#   X1 X2 X3
# 1  1  8 15
# 4  4 11 18
# 6  6 13 20
df[unlist(list), ]
#   X1 X2 X3
# 1  1  8 15
# 4  4 11 18
# 6  6 13 20

Note also that as.vector(list) doesn't create a vector, as you thought it would. You need unlist here (as I used in the last example).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM