簡體   English   中英

數據框中的匹配列基於其他數據框中的列中的值

[英]The matching columns from a data frame based on value in a column from other data Frame

我有兩個數據幀第一個是df1,具有485513列和100行,

head(df1)

sample  cg1 cg2 cg3 cg4 cg5 cg6 cg7 cg8 cg9 cg10    cg11
AAD_1   33435   33436   33437   33438   33439   33440   33441   33442   33443   33444   33445
AAD_2   0.33    1.33    2.33    3.33    4.33    5.33    6.33    7.33    8.33    9.33    10.33
AAD_3   0.56    1.56    2.56    3.56    4.56    5.56    6.56    7.56    8.56    9.56    10.56
AAD_4   45.9    46.9    47.9    48.9    49.9    50.9    51.9    52.9    53.9    54.9    55.9
AAD_5   46.9    47.9    48.9    49.9    50.9    51.9    52.9    53.9    54.9    55.9    56.9
AAD_6   47.9    48.9    49.9    50.9    51.9    52.9    53.9    54.9    55.9    56.9    57.9
AAD_7   48.9    49.9    50.9    51.9    52.9    53.9    54.9    55.9    56.9    57.9    58.9
AAD_8   49.9    50.9    51.9    52.9    53.9    54.9    55.9    56.9    57.9    58.9    59.9
AAD_9   50.9    51.9    52.9    53.9    54.9    55.9    56.9    57.9    58.9    59.9    60.9
AAD_10  51.9    52.9    53.9    54.9    55.9    56.9    57.9    58.9    59.9    60.9    61.9

第二個具有df2 84行和單列。 我的目標是使用df2數據框中的列中的值來獲取df1的子集。

head(df2)
    ID
    cg1
    cg2
    cg3
    cg4
    cg5

df2的值是我感興趣的df1的列名,因此我在R中嘗試了以下單一代碼。

> UP=(df1 %>% as.data.frame)[,df2$ID]

Up數據框向我返回查詢df2中不匹配的列

並導致數據框UP具有84列和100行,但上述命令行返回的所有列均與輸入查詢數據幀df2不匹配。

如果有人建議我替代解決方案,那就太好了

假設df2是一個Series:

>>> df[df2.tolist()]

        cg1       cg2       cg3       cg4       cg5
0  33435.00  33436.00  33437.00  33438.00  33439.00
1      0.33      1.33      2.33      3.33      4.33
2      0.56      1.56      2.56      3.56      4.56
3     45.90     46.90     47.90     48.90     49.90
4     46.90     47.90     48.90     49.90     50.90
5     47.90     48.90     49.90     50.90     51.90
6     48.90     49.90     50.90     51.90     52.90
7     49.90     50.90     51.90     52.90     53.90
8     50.90     51.90     52.90     53.90     54.90
9     51.90     52.90     53.90     54.90     55.90

如果它是一個數據框,那么這應該起作用:

df[df2.ID.tolist()]

R ,我們可以做

df[as.character(df2$ID)]

假設“ ID”列為factor 如果是character類,則更容易

df[df2$ID]

但是,如果“ ID”中的某些元素不在“ df”的列名中,則最好使用intersect

df[intersect(colnames(df), df2$ID)]

如果'df'是data.table ,則子集列的通常方法是包括with =FALSE 它在?data.table提到

默認情況下,with = TRUE,並且j在x的框架內求值; 列名稱可用作變量。

當with = FALSE j是列名稱的字符向量時,要選擇的列位置的數字向量或格式為startcol:endcol,並且返回的值始終是data.table。 with = FALSE通常在data.table中非常有用,可以動態選擇列。 請注意,x [,cols,with = FALSE]等效於x [,.SD,.SDcols = cols]。

因此,以上命令將是

 df[, as.character(df2$ID), with = FALSE]

要么

 df[, df2$ID, with = FALSE] #if 'ID' is already character class.

要么

 df[, intersect(colnames(df), df2$ID), with = FALSE]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM