如何根据我在 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 中的值。
在这个简单的数据集中,我知道我可以做到这一点,但只需删除 df2 中的 x3、x4,但理想情况下,我想将它应用于更大的数据集,其中我有超过 100 个变量,因此我想这样做它以编程方式。
我找不到一个骗子所以这里开始-简单地按 as.character(df1$ID)
的值子集,如
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
底层存储模式(整数)而不是它的级别进行子设置
虽然这个问题被标记为 data.table
,所以我们也可以通过引用来做这个(如果我们有 data.table
)- 不需要转换为 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
我有 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 中的值。
在这个简单的数据集中,我知道我可以做到这一点,但只需删除 df2 中的 x3、x4,但理想情况下,我想将它应用于更大的数据集,其中我有超过 100 个变量,因此我想这样做它以编程方式。
我找不到一个骗子所以这里开始-简单地按 as.character(df1$ID)
的值子集,如
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
底层存储模式(整数)而不是它的级别进行子设置
虽然这个问题被标记为 data.table
,所以我们也可以通过引用来做这个(如果我们有 data.table
)- 不需要转换为 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