Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修改dataframe列?_R_Dataframe_Data Conversion - Fatal编程技术网

如何修改dataframe列?

如何修改dataframe列?,r,dataframe,data-conversion,R,Dataframe,Data Conversion,数据帧列组件区域,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

数据帧列组件区域,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

请帮帮我

我们可以使用
melt
from
data.table
,它可以在
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
库(ggplot2)
聚集(温度、键、值、x1:y2)%>%

separate(key,into=c('key1','part'),sep=“(?我们可以使用
melt
from
data.table
,它可以在
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
库(ggplot2)
聚集(温度、键、值、x1:y2)%>%
分离(键,插入=c('key1','part'),sep=“(?使用基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
使用基本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