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]
我想对我的数据集的某些行(根据列标准)应用百分比计算。通常我会为此做一个 (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]