Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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
重塑不同变量的形状,以便从R中的一列中选择值_R_Dataframe - Fatal编程技术网

重塑不同变量的形状,以便从R中的一列中选择值

重塑不同变量的形状,以便从R中的一列中选择值,r,dataframe,R,Dataframe,下面是我的数据样本,我有更多的Rs和Os A R1 O1 R2 O2 R3 O3 1 3 3 5 3 6 4 2 3 3 5 4 7 4 3 4 4 5 5 6 5 我想得到以下数据 A R O Value 1 3 1 3 1 5 2 3 1 6 3 4 2 3 1 3 2 5 2 4 2 7 3 4 3 4 1

下面是我的数据样本,我有更多的Rs和Os

A   R1  O1  R2  O2  R3  O3
1   3   3   5   3   6   4
2   3   3   5   4   7   4
3   4   4   5   5   6   5
我想得到以下数据

A   R   O   Value
1   3   1   3
1   5   2   3
1   6   3   4
2   3   1   3
2   5   2   4
2   7   3   4
3   4   1   4
3   5   2   5
3   6   3   5
我尝试了熔化功能,但没有成功。任何帮助都将不胜感激

使用dplyr和tidyr的解决方案。关键是使用“聚集”收集除A之外的所有列,使用“提取”拆分列,然后使用“扩展”将数据帧转换回宽格式

library(dplyr)
library(tidyr)

dt2 <- dt %>%
  gather(Column, Number, -A) %>%
  extract(Column, into = c("Column", "ID"), regex = "([A-Z]+)([0-9]+)") %>%
  spread(Column, Number) %>%
  select(A, R, O = ID, Value = O)
dt2
#   A R O Value
# 1 1 3 1     3
# 2 1 5 2     3
# 3 1 6 3     4
# 4 2 3 1     3
# 5 2 5 2     4
# 6 2 7 3     4
# 7 3 4 1     4
# 8 3 5 2     5
# 9 3 6 3     5
资料


可能重复使用链接帖子的第一个答案:LibraryReformate2 ReformatedF,idvar=A,direction=long,Variable=listR=c2,4,6,O=c3,5,7,v.names=cR,O您会得到一个colnames为A,time,R,O的数据帧。要与您想要的结果完全匹配,请将O重命名为Value,以及按A列对数据进行O和排序的时间。在聚集函数之后,列中的元素有两部分。第一部分是大写字母R,O。。。。而第二部分是数字1,2,3。我们可以使用extract函数指定要创建的两个新列Column ID。正则表达式也有两部分。[A-Z]+捕获大写字母,而0-9+捕获数字。
dt <- read.table(text = "A   R1  O1  R2  O2  R3  O3
1   3   3   5   3   6   4
                 2   3   3   5   4   7   4
                 3   4   4   5   5   6   5",
                 header = TRUE)