我有两个数据帧第一个是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不匹配。
如果有人建议我替代解决方案,那就太好了
在中R
,我们可以做
df[as.character(df2$ID)]
假设“ ID”列为factor
。如果是character
上课的话,会更容易
df[df2$ID]
但是,如果“ ID”中的某些元素不在“ df”的列名中,则最好使用 intersect
df[intersect(colnames(df), df2$ID)]
如果'df'是a 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]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句