根据条件收集数据框中的多列

时间:2019-08-24 10:29:35

标签: r dplyr

我有一个宽格式的大型数据集(一百万行和约300列)。 数据集包含多个产品的不同指标,例如收入,成本等。不幸的是,数据集采用了宽格式。因此,诸如收入或成本之类的变量并非一栏。而是每个产品的收入/成本等都有一个列。

例如,这些列称为“ product1_revenue”,“ product2_revenue”,“ product1_costs”,“ product2_costs”等。

我想将数据集转换为长格式,以便可以正常使用。

我可以实现一个变量“ total_revenue”的转换。这行得通(除了我无法保留id的事实),但我也希望将其用于所有其他指标。

  select(ends_with("_total_revenue")) %>%
  gather(key=product,value="total_revenue") %>%
  mutate(product=str_replace(product,"_total_revenue",""))

### Trying to keep the IDs does not work:
dataset %>%
  select(ends_with("_total_revenue"),id) %>%
  gather(key=product,value="total_revenue") %>%
  mutate(product=str_replace(product,"_total_revenue",""))

### I want something like this (if it would work of course)

i<-c("_total_revenue","_total_cost")
for(ends_with(colnames(dataset),i) in i) 
{
dataset %>%
  select(ends_with(!!i),id) %>%
  gather(key=product,value=!!i) %>%
  mutate(product=str_replace(product,!!i,""))
  print(i)
}

1 个答案:

答案 0 :(得分:0)

假设您拥有类似这样的数据:

let animationId;

function screenstart(){
  randcal();
  ifstatements(); 
  animationId = requestAnimationFrame(screenstart);
}

function screenstop(){
  cancelAnimationFrame( animationId );
}

我们可以使用df <- data.frame(id = 1:5, product1_cost = 11:15, product2_cost = 16:20, product1_revenue = 21:25, product2_revenue = 26:30) df # id product1_cost product2_cost product1_revenue product2_revenue #1 1 11 16 21 26 #2 2 12 17 22 27 #3 3 13 18 23 28 #4 4 14 19 24 29 #5 5 15 20 25 30 库中的函数来转换宽格式的数据。

tidyr