我会很感激的帮助与R.重新排序数据框 其中一列是这样[R重排一列分三路
a
b
c
d
e
f
g
h
i
j
k
l
,我想使它
a b c
d e f
g h i
j k l
如何在R或c-shell中执行此操作?
我会很感激的帮助与R.重新排序数据框 其中一列是这样[R重排一列分三路
a
b
c
d
e
f
g
h
i
j
k
l
,我想使它
a b c
d e f
g h i
j k l
如何在R或c-shell中执行此操作?
matrix(your_vector, ncol=3, byrow=TRUE)
这将完成你的第二个版本:
orig <- matrix(letters[1:12], ncol=1)
new[ seq(1, 1+ 4*3, by=4), ] <- matrix(orig, ncol=3, byrow=TRUE)
> new
[,1] [,2] [,3]
[1,] "a" "b" "c"
[2,] "0" "0" "0"
[3,] "0" "0" "0"
[4,] "0" "0" "0"
[5,] "d" "e" "f"
[6,] "0" "0" "0"
[7,] "0" "0" "0"
[8,] "0" "0" "0"
[9,] "g" "h" "i"
[10,] "0" "0" "0"
[11,] "0" "0" "0"
[12,] "0" "0" "0"
[13,] "j" "k" "l"
关键是要构造一个非连续的行序列,其将接受字符值的4×3矩阵。由于这是一个矩阵,它会用引号打印,但矩阵中的值实际上并没有真正的引号;它们只是字符分类的元素而不是数字。
merge
可以在这里协助。
请考虑以下初始data.frame
。两列,一个字母“A”到“L”,接下来的数字1到12。
mydf <- data.frame(A = letters[1:12], B = 1:12)
你已经看到,一个向量转换为多列矩阵使用matrix(your_vector...)
完成。如果您查看merge
的代码,则会看到如果您尝试合并data.frame
与matrix
,则矩阵将使用as.data.frame
转换为数据帧,从而导致变量名称如“V1”,“V2”,“等等。
我们可以利用所有的琐事的构建merge
如下命令:
merge(mydf, matrix(mydf$A, ncol = 3, byrow=TRUE),
by.x = "A", by.y = "V1", all.x = TRUE)
# A B V2 V3
# 1 a 1 b c
# 2 b 2 <NA> <NA>
# 3 c 3 <NA> <NA>
# 4 d 4 e f
# 5 e 5 <NA> <NA>
# 6 f 6 <NA> <NA>
# 7 g 7 h i
# 8 h 8 <NA> <NA>
# 9 i 9 <NA> <NA>
# 10 j 10 k l
# 11 k 11 <NA> <NA>
# 12 l 12 <NA> <NA>
填充用零是没有意义的,因为在data.frame
每列只能有一种类型。因此,您的零将被转换为字符或因素。
当然,重新命名和重新排序列是一个简单的练习,我将留给读者。
谢谢!有效! – user2283859
@ user2283859,如果这解决了您的问题,请*考虑* [接受它](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。谢谢! – A5C1D2H2I1M1N2O1R2T1
你是什么意思reorder-你是否试图将12个项目的一列变成三个四个项目的列?如果是这样,它怎么能适合相同的数据框? –
我刚刚意识到我的问题更加复杂,因为我希望这个专栏能够完成我所说的内容,但不要修改其他专栏。所以基本上重排序后的第一行是abc,第二行是0 0 0,第三行是0 0 0,第四行是def,等等...... – user2283859
请举个例子输入数据(最好使用'dput')和你想要的输出的例子。 –