基于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!