R 每5行将一列转换为新列(数字间隔)
我有一个很长的专栏,里面有很多分析的结果(作为一个.txt文件,我将用R读取)。从顶部开始,前5行是对应于Sample1的结果,第二块5行(第6、7、8、9和10行)对应于Sample2,依此类推,从Sample1到Sample57。所以,我想把那个长列拆分成57列,按样本分开。 让我们从一个较小的示例开始简化问题,只使用前两个示例(因此,该列只有10个值,每个值5个)。假设我们有这个列向量:R 每5行将一列转换为新列(数字间隔),r,multiple-columns,R,Multiple Columns,我有一个很长的专栏,里面有很多分析的结果(作为一个.txt文件,我将用R读取)。从顶部开始,前5行是对应于Sample1的结果,第二块5行(第6、7、8、9和10行)对应于Sample2,依此类推,从Sample1到Sample57。所以,我想把那个长列拆分成57列,按样本分开。 让我们从一个较小的示例开始简化问题,只使用前两个示例(因此,该列只有10个值,每个值5个)。假设我们有这个列向量: 0.01 0.02 0.45 0.34 0.55 0.78 0.08 0.49 0.50 0.33
0.01
0.02
0.45
0.34
0.55
0.78
0.08
0.49
0.50
0.33
我知道前5个数字对应于样本1,第二个对应于样本2。我想这样做:
0.01 0.78
0.02 0.08
0.45 0.49
0.34 0.50
0.55 0.33
总的来说,我想将该列向量转换为一个矩阵,其中每列有5行,这些数字的顺序与原始向量中的顺序相同。就像你把原始向量切成5行,然后按顺序粘贴到右边。我搜索过将一列拆分为多列的命令,但它们使用了可以识别字符模式的东西。这是另一种情况。
我在终端上也发现了这一点,但我想知道R中是否有一种方法可以做到这一点,而且可能更简单
是否有一种方法严格地每5行执行一次?是的,您可以执行以下操作:
as.data.frame(split(data, 1:x))
其中x=行数/5;在你的例子中,x=2,因为你有10个观察值,我们可以使用
矩阵来构造它
matrix(df1[,1], nrow=5, ncol=2)
# [,1] [,2]
#[1,] 0.01 0.78
#[2,] 0.02 0.08
#[3,] 0.45 0.49
#[4,] 0.34 0.50
#[5,] 0.55 0.33
如果行数不是5的倍数,则使用tidyverse
中的spread
或dcast
fromdata.table
(restrape2
)
数据
df1如果数据位于名为dtf
的数据框中,则可以使用dtf$sample添加一列样本号
library(tidyverse)
df1 %>%
mutate(i1 = rep(1:5, length.out=n()), grp = paste0("Col", cumsum(i1==1))) %>%
spread(grp, Col1) %>%
select(-i1)
# Col1 Col2
#1 0.01 0.78
#2 0.02 0.08
#3 0.45 0.49
#4 0.34 0.50
#5 0.55 0.33
df1 <- structure(list(Col1 = c(0.01, 0.02, 0.45, 0.34, 0.55, 0.78, 0.08,
0.49, 0.5, 0.33)), .Names = "Col1", class = "data.frame", row.names = c(NA,
-10L))