Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_List_Vector_Split_Purrr - Fatal编程技术网

基于R中的多列拆分数据集

基于R中的多列拆分数据集,r,list,vector,split,purrr,R,List,Vector,Split,Purrr,我有一个数据帧和一个向量,如果值出现在向量中,我想将数据帧分割成多个列表 例如,以下是向量: foods_to_serve <- c("Sweets", "Bitter") 我知道我可以使用split,但我不知道如何使它在这些不同的列上迭代。我想我可能需要使用purrr的pmap函数,但我不确定。我不介意最终列表是否保留了他们第一、第二或第三喜欢的食物,但我确实需要它在原始数据框中包含其余信息。如有可能,请提供一个整洁的解决方案 我也尝试过使用%in%,但我也不知道如何使它覆盖多个列。可

我有一个数据帧和一个向量,如果值出现在向量中,我想将数据帧分割成多个列表

例如,以下是向量:

foods_to_serve <- c("Sweets", "Bitter")
我知道我可以使用split,但我不知道如何使它在这些不同的列上迭代。我想我可能需要使用purrr的pmap函数,但我不确定。我不介意最终列表是否保留了他们第一、第二或第三喜欢的食物,但我确实需要它在原始数据框中包含其余信息。如有可能,请提供一个整洁的解决方案


我也尝试过使用%in%,但我也不知道如何使它覆盖多个列。

可能类似于这样:

[1] 
Food_to_serve  name      hunger
Sweets        Angela     high
Sweets        Claire     high
Sweets        Justin     low

[2]
Food_to_serve  name      hunger
Bitter         Angela    high

library(dplyr)
library(tidyr)
gather(problem,key = favfood,value = type,favfood1:favfood3,na.rm = TRUE) %>% 
  filter(type %in% foods_to_serve) %>% 
  group_split(type)

请注意,group_split仍被标记为具有一定的实验性,因此它的行为可能会随之改变。

可能是这样的:

[1] 
Food_to_serve  name      hunger
Sweets        Angela     high
Sweets        Claire     high
Sweets        Justin     low

[2]
Food_to_serve  name      hunger
Bitter         Angela    high

library(dplyr)
library(tidyr)
gather(problem,key = favfood,value = type,favfood1:favfood3,na.rm = TRUE) %>% 
  filter(type %in% foods_to_serve) %>% 
  group_split(type)

请注意,组分割仍被标记为某种实验性的,因此其行为可能会发生变化。

filtertype%in%foods\u为我们提供为什么需要这条线?@joran,谢谢!有一个问题,如果有时人们可以列出3种食物,而其他时候,他们可以列出4种或更多的favfood4,等等。有没有办法修改它,使之成为像maxfavfood这样的东西,我知道它不起作用?@J.Sabree change favfood1:favfood3改为-cname,hunger@M-M,问题是,在我的数据集中,这些变量在中间,但有时其他变量会被加减。我正在试图找到一种方法,使其能够抵抗用户错误。编辑:我刚刚发现,您可以在gather中使用contains。取而代之的是favfood1:favfood3,另一个选择是做containsfavfood以达到同样的效果。再次感谢@joran!过滤器键入%in%foods\u提供为什么我们需要这条线?@joran,谢谢你!有一个问题,如果有时人们可以列出3种食物,而其他时间,他们可以列出4种或更多的favfood4,等等。有没有办法修改它,使之成为像maxfavfood这样的东西,我知道它不起作用?@J.Sabree change favfood1:favfood3改为-cname,hunger@M-M,问题是,在我的数据集中,这些变量在中间,但有时其他变量会被加减。我正在试图找到一种方法,使其能够抵抗用户错误。编辑:我刚刚发现,您可以在gather中使用contains。取而代之的是favfood1:favfood3,另一个选择是做containsfavfood以达到同样的效果。再次感谢@joran!