dplyr:如何根据其他列中的值计算组内的倍数变化

问题描述

我当前的数据大致具有以下模式:

Tree   Fertilized   Region   Fruits

apple  lightly      sunny    100
apple  lightly      dark     50
apple  heavily      sunny    300
apple  heavily      dark     200
pear   lightly      sunny    150
pear   lightly      dark     200
pear   heavily      sunny    300
pear   heavily      dark     150

在这里,我想计算(作为较大函数的一部分)在施肥量和树类型的每种组合中,将树放置在阳光充足的地方而不是黑暗处的倍数变化(例如2倍变化)轻度受精的苹果树):

df%<>%
  group_by(Tree,Fertilized) %>% 
  summarise(!!paste0("fold_change_",quote(Fruits)) := .[Region == "sunny","Fruits"]/.[type == "dark","Fruits"])

但是,我收到一条错误消息,说“水果”列不存在。有人对如何使它起作用有建议吗?我猜该解决方案是一些小的语法调整,但我似乎无法自己或在线找到它。

实际的数据集具有更多的树类型和参数,例如“水果”,因此我选择了管道结构和列的动态标签(“ !! paste0()”,“:=“),这可能是相关的或不相关的解决这个问题。

在此先感谢任何尝试提供帮助的人!

干杯,罗布

解决方法

我将使用分组操作:

pyinstaller --onefile 'my_python_file.py'

data.table

library(data.table)
library(dplyr)


f <- tempfile()
writeLines("
Tree,Fertilized,Region,Fruits,apple,lightly,sunny,100,dark,50,heavily,300,200,pear,150,150
",f)
dat <- read.csv(f)

tidyverse

dat <- data.table(dat)

dat[order(Region),.(fold_change = Fruits[2] / Fruits[1]),by=.(Tree,Fertilized)]
#>     Tree Fertilized fold_change
#> 1: apple    lightly        2.00
#> 2: apple    heavily        1.50
#> 3:  pear    lightly        0.75
#> 4:  pear    heavily        2.00