Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 同时从两列中提取值_R - Fatal编程技术网

R 同时从两列中提取值

R 同时从两列中提取值,r,R,我有以下称为数据的df: ProbeID SampleID ExperimID Value 1 2747406 1 2 6.44 1 2747406 4 2 5.90 等… 我试图提取列4(数据[,4])中与SampleID=1(数据[,2]=1)和SampleID=4(数据[,2]=4)匹配的值 重要的是,这些值与SampleID匹配并一起提取(即,对于SampleID 1,值=6.

我有以下称为数据的df:

  ProbeID    SampleID ExperimID    Value    
1 2747406        1         2       6.44 
1 2747406        4         2       5.90
等…

我试图提取列4(数据[,4])中与SampleID=1(数据[,2]=1)和SampleID=4(数据[,2]=4)匹配的值

重要的是,这些值与SampleID匹配并一起提取(即,对于SampleID 1,值=6.44,对于SampleID 4,值=5.90)。它们可以分为新的df(x和y),理想情况下,给我x和所有SampleID 1值,给我y和所有SampleID 4值。 我完全被困在这个问题上,非常感谢您的帮助

目标是获得两个新的数据帧,如x和y,如下所示:

其中x为:

     SampleID    Value    
1       1        6.44 
etc..
y是:

    SampleID     Value    
1       4        5.90
etc...

这是
split

dataBySample <- split(data, data$SampleID)
如果您将这些data.frames保留在列表中并且不污染全球环境,那么您对这些data.frames所做的任何事情都将更容易控制。特别是,在您的评论中,它指出您有2405670个样本。是否确实要创建那么多data.frames



我认为你应该听mnel,但如果你真的想用不相交的数据块把你的工作区弄得乱七八糟,那么就这样做:

 res1 <- dfrm[ dfrm$sampleID == 1 , c("SampleID",    "Value") ]
 res4 <- dfrm[ dfrm$sampleID == 4 , c("SampleID",    "Value") ] 

将它们分隔为一个数据帧的res1。我需要将它们提取到两个单独的df中,如上所示(也就是说,我需要所有与sampleId=1+对应值匹配的值被提取到一个新的df中,称为x,所有sampleId=4+它们的值被提取到一个df中,称为say y y。谢谢!不,@user1698774…它实际上将它们分割成一个列表,第一个元素是一行data.frame,第二个元素也是一行data.frame。对不起,哟你是对的,它确实分割了它们,我有超过2405670行,所以只看到了第一行。我如何将它们提取到单独的df tho中?将它们按行分割在一个df中对我的需要没有帮助。对不起,长夜。非常感谢你的帮助!请参阅我的编辑。我不认为这在很多情况下特别有用,尤其是特别是如果你有超过200万个样本ID。会有更好的方法来单独查看每个样本,但在不知道你想对每个子集做什么的情况下,我无法进一步帮助你。r-help邮件列表上有一句话,大意是“只有那些应该使用
assign()的人”
是理解为什么永远不要使用它的人。”特别是,如果存在许多不同的SampleID值(考虑到数据集的巨大规模,这似乎是合理的)你的工作区会变得非常混乱。如果你只想要对应于SampleID 1和4的,我会使用DWin的解决方案。根据你的描述,在新的数据帧x中,SampleID应该是1,而不是2?
 res1 <- dfrm[ dfrm$sampleID == 1 , c("SampleID",    "Value") ]
 res4 <- dfrm[ dfrm$sampleID == 4 , c("SampleID",    "Value") ]