首页 文章

我可以使用dplyr :: mutate计算方差吗?

提问于
浏览
0

我想在我的数据表中创建一个新列,其值存储在我表中的其他列中 . 我认为来自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))

这是我得到的错误:

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计算方差?我应该使用其他解决方案?

3 回答

  • 0

    如果 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)
    
  • 2

    看起来你需要逐行执行操作 . 你可以试试这个

    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))
    

    或者你还想做别的什么?

  • 0

    如果您需要每行的方差,则选项将使用 dorowwise()

    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="."))))
    

相关问题