我可以使用 dplyr::mutate 计算方差吗?
Can I calculate variance using dplyr::mutate?
我想在我的数据 table 中创建一个新列,其值的差异存储在我的 table 中的其他一些列中。我认为 dplyr 包中的 mutate 函数对我来说是最好的解决方案,但不幸的是它似乎不起作用。
这是我正在使用的代码:
require(dplyr)
CPI <- read.csv("CPI.csv", sep = ";")
CPI <- tbl_df(CPI)
CPI <- mutate(CPI, variance = var(CPI.1:CPI.6, na.rm = T))
这是我在 return:
中遇到的错误
Error in c(1.3, 1.4, 2.9, 3.1, NA, NA, NA, NA, NA, NA, NA, NA):c(NA, 1.2253333335, :
NA/NaN argument
是否可以使用 mutate 计算方差?我应该使用其他解决方案吗?
看来您需要逐行执行操作。你可以试试这个
require(dplyr)
CPI <- read.csv("CPI.csv", sep = ";")
CPI <- tbl_df(CPI)
CPI <- group_by(CPI, 1:nrow(CPI))
CPI <- mutate(CPI, variance = var(CPI.1:CPI.6, na.rm = T))
或者您是否正在尝试做其他事情?
如果 CPI.1:CPI.6
评估如您所料,我会感到惊讶。为什么不拿你原来的data.frame
然后这样做:
m <- as.matrix(subset(CPI, select=CPI.1:CPI.6))
apply(m, 1, var, na.rm=TRUE)
或者为了速度和清晰度使用 matrixStats
包:
rowVars(m)
如果您需要每一行的方差,一个选项是使用 do
和 rowwise()
library(dplyr)
nm1 <- paste('CPI', 1:6, sep='.')
CPI %>%
rowwise() %>%
do(data.frame(., variance=var(unlist(.[nm1]), na.rm=TRUE)))
数据
set.seed(25)
CPI <- as.data.frame(matrix(sample(c(NA,1:40), 7*20, replace=TRUE),
ncol=7, dimnames=list(NULL, paste('CPI', 1:7, sep="."))))
我想在我的数据 table 中创建一个新列,其值的差异存储在我的 table 中的其他一些列中。我认为 dplyr 包中的 mutate 函数对我来说是最好的解决方案,但不幸的是它似乎不起作用。
这是我正在使用的代码:
require(dplyr)
CPI <- read.csv("CPI.csv", sep = ";")
CPI <- tbl_df(CPI)
CPI <- mutate(CPI, variance = var(CPI.1:CPI.6, na.rm = T))
这是我在 return:
中遇到的错误Error in c(1.3, 1.4, 2.9, 3.1, NA, NA, NA, NA, NA, NA, NA, NA):c(NA, 1.2253333335, :
NA/NaN argument
是否可以使用 mutate 计算方差?我应该使用其他解决方案吗?
看来您需要逐行执行操作。你可以试试这个
require(dplyr)
CPI <- read.csv("CPI.csv", sep = ";")
CPI <- tbl_df(CPI)
CPI <- group_by(CPI, 1:nrow(CPI))
CPI <- mutate(CPI, variance = var(CPI.1:CPI.6, na.rm = T))
或者您是否正在尝试做其他事情?
如果 CPI.1:CPI.6
评估如您所料,我会感到惊讶。为什么不拿你原来的data.frame
然后这样做:
m <- as.matrix(subset(CPI, select=CPI.1:CPI.6))
apply(m, 1, var, na.rm=TRUE)
或者为了速度和清晰度使用 matrixStats
包:
rowVars(m)
如果您需要每一行的方差,一个选项是使用 do
和 rowwise()
library(dplyr)
nm1 <- paste('CPI', 1:6, sep='.')
CPI %>%
rowwise() %>%
do(data.frame(., variance=var(unlist(.[nm1]), na.rm=TRUE)))
数据
set.seed(25)
CPI <- as.data.frame(matrix(sample(c(NA,1:40), 7*20, replace=TRUE),
ncol=7, dimnames=list(NULL, paste('CPI', 1:7, sep="."))))