【发布时间】:2017-10-17 05:46:12
【问题描述】:
我正在尝试通过以下过程在第一行中绘制描述性变量。 我也尝试过引用列/行名称,但没有成功
- 旋转 CSV 数据中的行和列,以获得线程A very simple histogram with R? 和
ggplot中所需的对应数据结构(高表) -
将事件的直方图绘制为
Absolute变量异或(Average、Min、Max)- 如果只有绝对值,只画直方图中的绝对值。
- 如果(平均值、最小值和最大值),只需将它们绘制在带有胡须的直方图中(= 胡须图),胡须的限制由最小值和最大值决定。
数据
-
最初,
data.csv"Vars" , "Sleep", "Awake", "REM", "Deep" "Absolute", , , 5 , 7 "Average" , 7 , 12 , , "Min" , 4 , 5 , , "Max" , 10 , 15 , , -
视觉重塑后的数据
V1 V2 V3 V4 Vars Absolute Average Min Max Sleep <NA> 7 4 10 Awake <NA> 12 5 15 REM 5 <NA> <NA> <NA> Deep 7 <NA> <NA> <NA> -
R 整形后的数据
data <- structure(list(V1 = structure(c(3L, NA, NA, 1L, 2L), .Names = c("Vars", "Sleep", "Awake", "REM", "Deep"), .Label = c(" 5", " 7", "Absolute" ), class = "factor"), V2 = structure(c(3L, 2L, 1L, NA, NA), .Names = c("Vars", "Sleep", "Awake", "REM", "Deep"), .Label = c("12", " 7", "Average " ), class = "factor"), V3 = structure(c(3L, 1L, 2L, NA, NA), .Names = c("Vars", "Sleep", "Awake", "REM", "Deep"), .Label = c(" 4", " 5", "Min " ), class = "factor"), V4 = structure(c(3L, 1L, 2L, NA, NA), .Names = c("Vars", "Sleep", "Awake", "REM", "Deep"), .Label = c("10", "15", "Max " ), class = "factor")), .Names = c("V1", "V2", "V3", "V4"), row.names = c("Vars", "Sleep", "Awake", "REM", "Deep"), class = "data.frame")
带有调试代码的R代码
dat.m <- read.csv("data.csv")
# rotate rows and columns
dat.m <- as.data.frame(t(dat.m)) # https://stackoverflow.com/a/7342329/54964 Comment 42-
library("reshape2")
dat.m <- melt(dat.m, id.vars="Vars")
## Just plot values existing there correspondingly
library("ggplot2")
# https://stackoverflow.com/a/25584792/54964
# TODO following
#ggplot(dat.m, aes(x = "Vars", y = value,fill=variable))
错误
Error: id variables not found in data: Vars
Execution halted
R:3.3.3、3.4.0(向后移植)
操作系统:Debian 8.7
R reshape2, ggplot2, ... with sessionInfo() 加载两个包后
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] ggplot2_2.1.0 reshape2_1.4.2
loaded via a namespace (and not attached):
[1] colorspace_1.3-2 scales_0.4.1 magrittr_1.5 plyr_1.8.4
[5] tools_3.3.3 gtable_0.2.0 Rcpp_0.12.10 stringi_1.1.5
[9] grid_3.3.3 stringr_1.2.0 munsell_0.4.3
测试 HaberdashPI 的 proposal
图 1 中的输出,其中 Sleep 和 Awake 中的绝对值错误。
如果NA,只需将值设置为零。
图。 1 HaberdashPI 的提案输出不如预期
转置前dat.m的数据结构
'data.frame': 4 obs. of 5 variables:
$ Absolute: Factor w/ 2 levels " 5"," 7": NA NA 1 2
..- attr(*, "names")= chr "Sleep" "Awake" "REM" "Deep"
$ Average : Factor w/ 2 levels "12"," 7": 2 1 NA NA
..- attr(*, "names")= chr "Sleep" "Awake" "REM" "Deep"
$ Min : Factor w/ 2 levels " 4"," 5": 1 2 NA NA
..- attr(*, "names")= chr "Sleep" "Awake" "REM" "Deep"
$ Max : Factor w/ 2 levels "10","15": 1 2 NA NA
..- attr(*, "names")= chr "Sleep" "Awake" "REM" "Deep"
$ Vars : chr "Sleep" "Awake" "REM" "Deep"
Absolute Average Min Max Vars
Sleep <NA> 7 4 10 Sleep
Awake <NA> 12 5 15 Awake
REM 5 <NA> <NA> <NA> REM
Deep 7 <NA> <NA> <NA> Deep
转置后dat.m的数据结构
'data.frame': 16 obs. of 3 variables:
$ Vars : chr "Sleep" "Awake" "REM" "Deep" ...
$ variable: Factor w/ 4 levels "Absolute","Average ",..: 1 1 1 1 2 2 2 2 3 3 ...
$ value : chr NA NA " 5" " 7" ...
Vars variable value
1 Sleep Absolute <NA>
2 Awake Absolute <NA>
3 REM Absolute 5
4 Deep Absolute 7
5 Sleep Average 7
6 Awake Average 12
7 REM Average <NA>
8 Deep Average <NA>
9 Sleep Min 4
10 Awake Min 5
11 REM Min <NA>
12 Deep Min <NA>
13 Sleep Max 10
14 Awake Max 15
15 REM Max <NA>
16 Deep Max <NA>
测试 akash87 的 proposal
代码
ds <- dat.m
str(ds)
ds
ds$variable
ds$variable %in% c("Min","Max")
输出错误,因为最后都是False
$ Vars : chr "Sleep" "Awake" "REM" "Deep" ...
$ variable: Factor w/ 4 levels "Absolute","Average ",..: 1 1 1 1 2 2 2 2 3 3 ...
$ value : chr NA NA " 5" " 7" ...
Vars variable value
1 Sleep Absolute <NA>
2 Awake Absolute <NA>
3 REM Absolute 5
4 Deep Absolute 7
5 Sleep Average 7
6 Awake Average 12
7 REM Average <NA>
8 Deep Average <NA>
9 Sleep Min 4
10 Awake Min 5
11 REM Min <NA>
12 Deep Min <NA>
13 Sleep Max 10
14 Awake Max 15
15 REM Max <NA>
16 Deep Max <NA>
[1] "hello 3"
[1] Absolute Absolute Absolute Absolute Average Average Average Average
[9] Min Min Min Min Max Max Max Max
Levels: Absolute Average Min Max
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[13] FALSE FALSE FALSE FALSE
这样做ds[ds$variable %in% c("Min","Max"), ] 将给出False 输出,因为错误结转。
测试 Uwe 的 proposal
带有显式data.table::dcast 和两次data.table::melt 的代码。在molten <- ... 之前打印出sessionInfo()。注意library(ggplot2) 尚未加载,因为错误来自molten <- ... 行。
$ Rscript test111.r
Vars "Average" "Max" "Min" Absolute
1: Sleep 7 10 4 NA
2: Awake 12 15 5 NA
3: REM NA NA NA 5
4: Deep NA NA NA 7
R version 3.4.0 (2017-04-21)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux 8 (jessie)
Matrix products: default
BLAS: /usr/lib/openblas-base/libblas.so.3
LAPACK: /usr/lib/libopenblasp-r0.2.12.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets base
other attached packages:
[1] data.table_1.10.4
loaded via a namespace (and not attached):
[1] compiler_3.4.0 methods_3.4.0
Error in melt.data.table(transposed, measure.vars = c("Absolute", "Average")) :
One or more values in 'measure.vars' is invalid.
Calls: <Anonymous> -> melt.data.table
Execution halted
用测试代码 2 测试 Uwe 的提案
代码
molten <- structure(list(Vars = structure(c(1L, 2L, 1L, 2L, 1L, 2L), class = "factor", .Label = c("V1", "V2")), variable = structure(c(1L, 1L, 2L, 2L, 3L, 3L), class = "factor", .Label = c("ave", "ave_max", "lepo")), value = c(7L, 8L, 10L, 10L, 4L, 4L)), .Names = c("Vars", "variable", "value"), row.names = c(NA, -6L), class = c("data.table", "data.frame"))
print(molten)
library(ggplot2)
ggplot(molten, aes(x = Vars, y = value, fill = variable, ymin = lepo, ymax = ave_max)) +
geom_col() + geom_errorbar(width = 0.2)
输出
Vars variable value
1 V1 ave 7
2 V2 ave 8
3 V1 ave_max 10
4 V2 ave_max 10
5 V1 lepo 4
6 V2 lepo 4
Error in FUN(X[[i]], ...) : object 'lepo' not found
Calls: <Anonymous> ... by_layer -> f -> <Anonymous> -> f -> lapply -> FUN -> FUN
Execution halted
【问题讨论】:
-
你能发布你想要的输出吗?
-
@TheBiro 我在正文中更仔细地定义了所需的输出。
-
我试图找出我所做的对于您正在寻找的解释来说是错误的。你在期待什么?
-
@akash87 没有错。我正在测试你的提议。这是迄今为止最好的。
-
可以做哪些改进?
标签: r csv ggplot2 statistics