我目前正在尝试比较两个数据框(例如 df1 和 df2)的列名,并从其中一个 (df2) 中提取值,如果匹配,则创建新的(第三个)数据框架。
示例,
df1 <- data.frame(x3=469, x4=465, x7=501, x10=467, x12=459)
df2 <- data.frame(x3="IL_NA1A_P", x4="IL_NA3D_P", x5="PROD005_P", x6="PROD008_P",
x7="PROD009_P", x8="PROD010_P", x9="PROD012_P", x10="PROD014_P",
x11="PROD021_P", x12="PROD023A_P")
我希望输出与以下内容更多,
x3 x4 x7 x10 x12
IL_NA1A_P IL_NA3D_P PROD009_P PROD014_P PROD023A_P
任何帮助将不胜感激。
答案 0 :(得分:3)
这行得通:
df2[, colnames(df2) %in% colnames(df1)]
x3 x4 x7 x10 x12
1 IL_NA1A_P IL_NA3D_P PROD009_P PROD014_P PROD023A_P
您只需检查 df2
的哪些列名也出现在 df1
中,然后从 df2
中选择这些列。
答案 1 :(得分:1)
我们也可以使用
library(dplyr)
df2 %>%
select_at(vars(names(df1))
答案 2 :(得分:0)
如果 df1
中存在所有 df2
列名称,您可以使用 -
df2[names(df1)]
# x3 x4 x7 x10 x12
#1 IL_NA1A_P IL_NA3D_P PROD009_P PROD014_P PROD023A_P
如果 df1
中只有少数 df2
列名称,您可以使用 -
df2[intersect(names(df2), names(df1))]
或在 dplyr
中。
library(dplyr)
df2 %>% select(any_of(names(df1)))