如何根据在DF2中获得的重要变量对DF1中的列变量进行子集化? [英] How do I subset column variables in DF1 based on the important variables I got in DF2?
问题描述
我有2个这样的df
ID = c('x1','x2','x5')
df1 <- data.frame(ID)
x1 = c(1,2,3,4,5)
x2 = c(11,12,13,14,15)
x3 = c(21,22,23,24,25)
x4 = c(31,32,33,34,35)
x5 = c(41,42,43,44,45)
df2 <- data.frame(x1,x2,x3,x4,x5)
所需的输出
x1 x2 x5
1 1 11 41
2 2 12 42
3 3 13 43
4 4 14 44
5 5 15 45
我希望我的新数据集只包含那些在df1中标识为重要的变量(即x1,x2,x5),并带有df2的值。
I would like my new dataset to contain only those variables that are identified in df1 as important (i.e: x1,x2,x5) with the values from df2.
在这个简单的数据集中,我知道可以做到这一点,但只需删除df2中的x3,x4,但理想情况下,我想将其应用于更大的数据集超过100个变量,因此希望以编程方式进行。
In this simple dataset, I know I could do this but just removing x3,x4 in df2 but ideally I would like to apply it to a larger data set where I have more than 100 variables and hence would like to do it programatically.
推荐答案
我找不到重复对象,因此这里只是 as的子集。字符(df1 $ ID)
I can't find a dupe so here goes- simply subset by the values of as.character(df1$ID)
as in
df2[as.character(df1$ID)] ## Or just `df2[df1$ID]` if its already a character
# x1 x2 x5
# 1 1 11 41
# 2 2 12 42
# 3 3 13 43
# 4 4 14 44
# 5 5 15 45
as.character
的原因是为了避免通过 df1 $ ID
底层存储模式(整数)进行子设置,而不是按其级别
The reason for as.character
is in order to avoid sub-setting by df1$ID
underlying storage mode (integer) rather by it's levels
尽管此问题标有 data.table
,因此我们也可以通过引用(如果我们有 data.table
)来做到这一点-无需转换为 character
Though this question is tagged with data.table
, so we could also do this by reference (if we have a data.table
)- no need to convert to character
setDT(df2)[, setdiff(names(df2), df1$ID) := NULL]
df2
# x1 x2 x5
# 1: 1 11 41
# 2: 2 12 42
# 3: 3 13 43
# 4: 4 14 44
# 5: 5 15 45
这篇关于如何根据在DF2中获得的重要变量对DF1中的列变量进行子集化?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!