如何修改数据框列?

How to modify dataframe column?

dataframe 列组件区域,x1 平均值,x2 平均值,x1 se,x2 se。

我想要更改折线图 (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

请帮帮我..

我们可以使用 data.table 中的 melt,它可以在 measure 参数 [=17= 中采用多列从 'wide' 重塑为 'long' ]

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

使用基础 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