假设我有一个表示子集brief的 Dataframe ,我们将其命名为brief
,这里的值是子集规则。
library(tidyverse)
brief <- data.frame(apple = 1, orange = 2, pear = 3)
在第二个 Dataframe (称为types
)中,这是我想要划分子集的数据。
types <- data.frame(apple_cake = rnorm(5,0,1),
apple_pie = rnorm(5,0, 1),
apple_ice = rnorm(5,0, 1),
orange_cake = rnorm(5,0,1),
orange_pie = rnorm(5, 0, 1),
orange_ice = rnorm(5,0, 1),
pear_cake = rnorm(5,0,1),
pear_pie = rnorm(5, 0, 1),
pear_ice = rnorm(5,0, 1)
)
在我的示例中,我希望使用 Dataframe 1和 Dataframe 2对特定的苹果、橙子和梨食品项进行子集化。我希望使用第一个 Dataframe brief
中的值对第二个 Dataframe types
中的列进行子集化。
最后,我想给出一个最终的 Dataframe ,如下所示:
final <- types %>%
select(apple_cake, orange_pie, pear_ice)
在最终解决方案中,苹果项1、橙子项2和梨项3保留。
我尝试了各种dplyr函数,但没有效果。我也寻找类似的solutions,但不认为他们解决了我的问题,因为这些例子可能有两个 Dataframe 类似的列名。
1条答案
按热度按时间atmip9wb1#
在
base R
中,我们通过拆分后缀已删除的列名,将数据列拆分为具有相似前缀的list
Dataframe 。从brief
数据中的相应索引中提取([
)列,Map
和cbind
从list
数据中的相应索引中提取列,do.call
或者,另一种选择是循环遍历数据。使用
imap
、select
帧brief
,使用select-helper(starts_with
)遍历列,遍历brief
数据列(.y
)的名称,然后基于brief
列(.x
)的值索引遍历select