[英]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.