是否有一个R函数用于为一组变量的每个值减去不同的中间值?

是否有一个R函数用于为一组变量的每个值减去不同的中间值?,r,dplyr,R,Dplyr,我有一个数据框架,其中包含变量问号和估计值,向32人提出了210个问题(共6720个obs.)。 我想计算每个估计值的log10,然后减去每个问题的log10中位数 例如,对于问题1:Sum(log(Estimates1)-median1)/32,对于问题2:Sum(log(Estimates2)-median2)/32,等等,直到210。所以最后我希望每个问题有210个值 到目前为止,我计算了每个问题的中位数: m%分组人(问题ID)%>%summary(m=中位数(log10(估计)) 我正

我有一个数据框架,其中包含变量问号和估计值,向32人提出了210个问题(共6720个obs.)。 我想计算每个估计值的log10,然后减去每个问题的log10中位数

例如,对于问题1:Sum(log(Estimates1)-median1)/32,对于问题2:Sum(log(Estimates2)-median2)/32,等等,直到210。所以最后我希望每个问题有210个值

到目前为止,我计算了每个问题的中位数:

m%分组人(问题ID)%>%summary(m=中位数(log10(估计))

我正在寻找一个优雅的解决方案,我不需要拿出210个子集。有什么想法吗


提前谢谢

您可以使用基本R函数来实现这一点
ave
通过子集将函数应用于向量,并返回与原始向量长度相同的结果

# Calculate the medians within the dataframe using the ave function
data$logmedians <- ave( log(data$estimate,10) , data$question_ID, FUN=median)

# Now generate the difference between the log medians and the individual answers
data$diflogs <- log(data$estimate, 10) - data$logmedians

请注意,如果有偶数个响应,则日志的中位数与中位数的日志并不完全相同。仔细考虑你想要的确切数值。

你可以先计算
估计值的
log
,然后对每个问题从
中值
值中减去它,
求和
并除以32

library(dplyr)

data %>% 
 mutate(log_m = log10(estimate)) %>% 
 group_by(question_ID) %>% 
 summarize(m = sum(log_m - median(log_m))/32)

请按所示进行编辑。欢迎来到StackOverflow!请阅读相关信息以及如何给出建议。这样你可以帮助别人来帮助你!
library(dplyr)

data %>% 
 mutate(log_m = log10(estimate)) %>% 
 group_by(question_ID) %>% 
 summarize(m = sum(log_m - median(log_m))/32)