我正在尝试重塑我的数据框架,我的数据在很长的列中,我需要将这些数据分散到同一行但新的列中,正如你在上面看到的。
我遇到的主要问题之一是创建新列。我最终将创建近300个新列。在我的确切问题中,我将有A1,A2,一直到A23,与其他变量一样,所以手动初始化列似乎不可行。
有没有一种方法,我可以循环或可能使这一功能,以创建列和重塑我的数据框?
| Column A | Column B |
| -------- | -------- |
| Cell 1 | Cell 2 |
| Cell 3 | Cell 4 |
| Cell 5 | Cell 6 |
| Column A | Column B | Column A1 | Column B1 | Column A2| Column B2|
| -------- | -------- | --------- | --------- | ---------| ---------|
| Cell 1 | Cell 2 | Cell 3 | Cell 4 | Cell 5 | Cell 6 |
df$A1 <- NA #Initializing the new column
df$A1[1] <- df$A[2] #Setting the value in A row 2, to A1 row 1.
字符串
2条答案
按热度按时间jtw3ybtb1#
我们可以这样做。主要功能是创建一个
id
列,并在旋转成长格式后进行分组:个字符
示例数据:
型
yvt65v4c2#
为了在生成一定数量的列之后创建多行,我们需要为
pivot_wider()
建立一个行标识符,这是我最初对OP的评论的基础。为了说明这个概念,我们将为每列输入数据创建一个具有已知数量的复制(1 - n)的 Dataframe ,并使用复制计数来分配一个行标识符。我们首先为2个变量创建5个副本,并将它们转换为列名为A 1 - A 5和B 1 - B 5的格式,其中有50个数据元素,在
pivot_wider()
操作后,我们最终得到5行10列。首先,我们创建一些数据,其中每个单元格都是一个唯一的序列号,这样我们就可以看到数据元素是如何跨列分布的。
字符串
前几行看起来像这样:
型
接下来,我们将轴旋转得更长,以将列名与值分离,将列名与复制标识符组合,并使用
row_id
定义行。型
. and the output:
型
这个解决方案的技巧是在
rep()
函数中使用each =
参数来创建row_id
。而不是复制1:5 5 5次,each =
参数允许我们创建5个1,然后5个2,等等。这种顺序提供了正确的输入,将row_id
用作pivot_wider()
中的id_col
。如果我们将
var_id
和row_id
的创建移动到tidyverse管道中,完整的解决方案如下所示:型