Как изменить столбец данных? - PullRequest
0 голосов
/ 06 июля 2018

область компонента столбца данных, среднее значение x1, среднее значение x2, se se x1, se se x2.

Я хочу изменить фрейм данных для линейного графика (ggplot)

наконец, я делаю область столбца, часть, среднее значение, se. (часть - новый столбец)

как использовать код?

#data.frame = temp 
region   x1   x2    y1    y2
A         1    2    0.1   0.2 
B         3    4    0.3   0.2     

#modified data.frame
region   part   mean   se 
A         x1      1     0.1
A         X2      2     0.2
B         X1      3     0.3
B         X2      4     0.2

пожалуйста, помогите мне ..

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

с использованием Base R:

A = reshape(dat,t(matrix(2:5,2)),idvar = 1,dir="long",ids=dat$region)

setNames(transform(A,time=paste0("X",time),row.names=NULL)[order(A$region),],
      c(names(dat)[1],"Part","mean","se"))

  region Part mean  se
1      A   X1    1 0.1
3      A   X2    2 0.2
2      B   X1    3 0.3
4      B   X2    4 0.2
0 голосов
/ 06 июля 2018

Мы можем использовать melt из data.table, который может принимать несколько столбцов для преобразования из 'wide' в 'long' в аргументе measure

library(data.table)
melt(setDT(temp), measure = patterns("^x\\d+", "^y\\d+"),
   value.name = c('mean', 'se'), variable.name = 'part')[, 
         part := paste0("X", part)][order(region)]
#   region part mean  se
#1:      A   X1    1 0.1
#2:      A   X2    2 0.2
#3:      B   X1    3 0.3
#4:      B   X2    4 0.2

Или мы можем использовать tidyverse, так как это полезно для трубопровода с ggplot

library(ggplot2)
gather(temp, key, val, x1:y2) %>% 
     separate(key, into = c('key1', 'part'), sep="(?<=[a-z])(?=[0-9])") %>% 
     spread(key1, val) %>% 
     rename_at(3:4, ~ c('mean', 'se')) %>%
     mutate(part = paste0("X", part))
# region part mean  se
#1      A   X1    1 0.1
#2      A   X2    2 0.2
#3      B   X1    3 0.3
#4      B   X2    4 0.2
...