【问题标题】:lapply in lapply in data.tablelapply in lapply in data.table
【发布时间】:2016-07-08 08:53:15
【问题描述】:

我有数据

Score <- c(9.6 ,7.8,6.9,9.6,NA,NA,9.3,9.3,11.1,6.7,5.9,10.4,12.2,6.5,10.1,8.5,7.0,11.2,0.6,8.0)
CNTRL <- c(rep(12,4), rep(14,4), rep(16,4), rep(18,4), rep(20,2), rep(22,2))
SERV  <- c(rep(10, 5), rep(15,2), rep(20,13))
LOS <- c(rep(1,5), rep(0,15))
RESP <- c(rep(0,10), rep(1,10))
DataAnalysis <- data.table(Score, CNTRL, SERV, LOS, RESP)
DataAnalysis <- DataAnalysis[, lapply(.SD, as.character), by = Score]

如果我通过 CNTRL 找到 Score 的均值和 sd

DataAnalysis[,list (mean = mean(Score, na.rm = TRUE),sd = sd(Score, na.rm = TRUE)), by = CNTRL]

我如何一次为所有变量应用一个列表 CNTRL、SERV、LOS、RESP,因此它返回一个包含 4 个变量的列表

lapply(names(DataAnalysis)[-1], function(x) x[,list (mean = mean(Score, na.rm = TRUE),sd = sd(Score, na.rm = TRUE))],by = names(DataAnalysis)[-1])

我做错了,我做错了。

这是结果

[[1]]
   CNTRL Score.mean Score.sd
1:    12      8.475 1.350000
2:    14      9.300 0.000000
3:    16      8.525 2.605603
4:    18      9.325 2.417126
5:    20      9.100 2.969848
6:    22      4.300 5.232590

[[2]]
   SERV Score.mean Score.sd
1:   10   8.475000 1.350000
2:   15   9.300000       NA
3:   20   8.269231 3.065503

[[3]]
   LOS Score.mean Score.sd
1:   0   8.342857 2.958096
2:   1   8.475000 1.350000

[[4]]
   RESP Score.mean Score.sd
1:    0     8.7875 1.516045
2:    1     8.0400 3.345046

【问题讨论】:

    标签: r list data.table lapply


    【解决方案1】:

    更正的代码

    lapply(names(DataAnalysis)[-1], function(x) DataAnalysis[,list (mean = mean(Score, na.rm = TRUE),sd = sd(Score, na.rm = TRUE)),by = x])
    

    【讨论】:

    • 谢谢,第一次我确实改变了DataAnalysis,然后改变了,继续做,不能firgure
    猜你喜欢
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2020-11-21
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    相关资源
    最近更新 更多