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