R: 如何运行 计算df 的一部分而无需预先进行子集化?

R: How to run calculation on a part of the df without previous subsetting?

我想对我的数据集的某些行(根据列标准)应用百分比计算。通常我会为此做一个 (1) 子集,(2) 计算百分比,(3) 删除原始数据中的旧行(或以前的子集行),以及 (4) 最后通过 rbind() 将它们堆叠在一起。

我的问题是有 better/faster/shorter 方法来进行此计算吗?这里有一些示例数据:

df <- data.frame(object = c("apples","tomatoes", "apples","pears" ),
                 Value = c(50,10,30,40))

我想用于子集的百分比计算 (50%),例如苹果:

sub[,2] <- sub$Value * 50 /100

结果应该是这样的:

    object Value
1   apples    25
2 tomatoes    10
3   apples    15
4    pears    40

谢谢。可能有一个简单的方法,但我到目前为止还没有在网上找到解决方案。

为“苹果”'object' 创建逻辑索引,并根据 'index'.

仅计算 'Value' 的子集
 i1 <- df$object=='apples'
 df$Value[i1] <- df$Value[i1]*50/100

或者您可以使用 ifelse

 df$Value <- with(df, ifelse(object=='apples', Value*50/100, Value))

或者更快的方法是 data.table

library(data.table)
setDT(df)[object=='apples', Value := Value*0.5]