重塑不同变量的形状,以便从R中的一列中选择值
下面是我的数据样本,我有更多的Rs和Os重塑不同变量的形状,以便从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
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)