我想将每列中用逗号分隔的值对分成新数据框中的两个相邻列,并为两个新列中的每一列分配相同的列名.
也就是说,我想转换这个:
A B C D E
1,1 0,1 1,1 1,1 1,1
1,1 1,1 1,1 1,1 1,1
0,1 0,1 0,1 0,1 0,1
Run Code Online (Sandbox Code Playgroud)
对此:
A A B B C C D D E E
1 1 0 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
0 1 0 1 0 1 0 1 0 1
Run Code Online (Sandbox Code Playgroud)
如果数据框名称不能具有完全重复,则A_1和A_2 ......等等应该没问题.或者,将数据框的第一行中的名称替换为标题也可以.
我的实际数据集是大约200列~13,000行,所以我需要一种自动方法来分割列并将名称分配给数据帧的第二个版本.
你可以用
library(splitstackshape)
(newdf <- cSplit(df, names(df), ","))
# A_1 A_2 B_1 B_2 C_1 C_2 D_1 D_2 E_1 E_2
# 1: 1 1 0 1 1 1 1 1 1 1
# 2: 1 1 1 1 1 1 1 1 1 1
# 3: 0 1 0 1 0 1 0 1 0 1
Run Code Online (Sandbox Code Playgroud)
要创建重复的列名称,您可以执行以下操作,因为data.table也加载了splitstackshape
setnames(newdf, names(newdf), sub("_.*", "", names(newdf)))
newdf
# A A B B C C D D E E
# 1: 1 1 0 1 1 1 1 1 1 1
# 2: 1 1 1 1 1 1 1 1 1 1
# 3: 0 1 0 1 0 1 0 1 0 1
Run Code Online (Sandbox Code Playgroud)
但是你知道,拥有重复的列名是一个糟糕的主意.