r - 计算所有数值列的绝对值的平均值
问题描述
我想计算示例数据集的所有数字列的绝对值的平均值DT
:
library(data.table)
set.seed(1)
DT <- data.table(panelID = sample(50,50), # Creates a panel ID
Country = c(rep("Albania",30),rep("Belarus",50), rep("Chilipepper",20)),
some_NA = sample(0:5, 6),
some_NA_factor = sample(0:5, 6),
Group = c(rep(1,20),rep(2,20),rep(3,20),rep(4,20),rep(5,20)),
Time = rep(seq(as.Date("2010-01-03"), length=20, by="1 month") - 1,5),
norm = round(runif(100)/10,2),
Income = round(rnorm(10,-5,5),2),
Happiness = sample(10,10),
Sex = round(rnorm(10,0.75,0.3),2),
Age = sample(100,100),
Educ = round(rnorm(10,0.75,0.3),2))
DT [, uniqueID := .I] # Creates a unique ID
DT[DT == 0] <- NA # https://stackoverflow.com/questions/11036989/replace-all-0-values-to-na
DT$some_NA_factor <- factor(DT$some_NA_factor)
我试图计算平均值和绝对平均值如下:
mean_of_differences <- DT[,lapply(Filter(is.numeric,.SD),mean, na.rm=TRUE)]
mean_of_differences <- as.data.frame(t(mean_of_differences))
mean_of_differences <- round(mean_of_differences, digits=2)
mean_of_absolute_diff <- DT[,lapply(Filter(is.numeric,.SD),function(x) mean(abs(x),na.rm=TRUE))]
mean_of_absolute_diff <- as.data.frame(t(mean_of_absolute_diff))
mean_of_absolute_diff <- round(mean_of_differences, digits=2)
然而,绝对差异的收入平均值是负数(就像正常平均值一样),这显然是不可能的。如果我查看我的代码,我不明白我做错了什么。我在看什么?
解决方案
这是使用 data.table 的解决方案。它 (i) 识别数字列,并且 (ii) 获得每个数字列的绝对值的平均值。
数据
dt = data.table(
num1 = rnorm(100),
num2 = rnorm(100),
strv = sample(LETTERS, 100, replace = T)
)
代码
numcols = colnames(dt)[unlist(lapply(dt, is.numeric))] # Which columns are numeric?
# > numcols
# [1] "num1" "num2"
meandt = dt[, lapply(.SD, function(x) mean(abs(x))), .SDcols = numcols]
newcols = paste('mean_abs_', numcols, sep = ''); colnames(meandt) = newcols
# > meandt
# mean_abs_num1 mean_abs_num2
# 1: 0.8287523 0.8325123
推荐阅读
- web-chat - How to debug Webchat in iPhone Simulator
- python - sending email using smtplib and SSL but receiver is no receiving it
- php - Inherit @IsGranted("ROLE_ADMIN") from parent route or controller
- javascript - 如何将 item.id 传递给 swipeButtons?
- amp-html - 在 AMP 页面中无需用户交互即可改变 DOM 对象
- typescript - 使用 glob 获取文件并要求
- javascript - Javascript/node.js 在服务器和客户端之间发送数据
- spring-boot - SpringBoot 不同的身份验证(MS AD 和 JWT)到一个控制器
- arrays - 从两个向量的笛卡尔积构造 Matlab 矩阵
- ios - 我应该在我的代码中更改什么以使单元格中的文本字段在关闭 VC 后不为零