R - 使用cbind自动将列名重命名为name.x name.y

时间:2017-01-13 05:47:19

标签: r

问题相当简单。我们假设我有两个数据帧:

> dput(x)
structure(list(a1 = 1:3, b1 = c("a", "b", "c")), .Names = c("a1", "b1"), row.names = c(NA, -3L), class = "data.frame")
> dput(z)
structure(list(a1 = 4:6, b2 = c("d", "e", "f")), .Names = c("a1", "b2"), row.names = c(NA, -3L), class = "data.frame")

head(x)
  a1 b1
1  1  a
2  2  b
3  3  c

head(z)
  a1 b2
1  4  d
2  5  e
3  6  f

当我收集这些数据帧时,我得到了这个:

cbind(x,z)
  a1 b1 a1 b2
1  1  a  4  d
2  2  b  5  e
3  3  c  6  f

但我想要这个:

cbind(x,z)
  a1.x b1 a1.y b2
1    1  a    4  d
2    2  b    5  e
3    3  c    6  f

其中列名称不重复,而是匹配的列名称获得.x和.y。这类似于我认为的合并行为。注意我不一定需要使用cbind(),只需(最好)一个单行函数即可完成。

谢谢!

3 个答案:

答案 0 :(得分:4)

我们可以merge使用by = 0

merge(x, z, by = 0)

#  Row.names a1.x b1 a1.y b2
#1         1    1  a    4  d
#2         2    2  b    5  e
#3         3    3  c    6  f

?merge中的文件指定

  

要合并的列可以通过名称,数字或逻辑向量来指定:名称" row.names"或者数字0指定行名称。

所以我们在这里按照rownames

合并两个数据帧
rownames(x)
#[1] "1" "2" "3"
rownames(z)
#[1] "1" "2" "3"

答案 1 :(得分:1)

我们可以将<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="flex_ramme"> <form action="send_bestilling.php" method="post"> <fieldset> <legend>Bestilling af maling</legend> <div class="maling_rekke"> <div class="maling_ramme"> <img class="maling_billede maling_felt" src="spand.jpg" alt="Maling type A"> </div> <p class="maling_type maling_felt">Sigma S2U Satin - slidstærk</p> <p class="maling_pris">100 kr.</p><input type="hidden" name="pris" value="100"> <p class="maling_felt">Antal:</p> <input class="maling_input maling_felt" type="text" name="antal" value="0"><br> <p class="maling_felt">Subtotal (inkl. moms):</p> <input class="maling_sub maling_felt" type="text" name="subpris" value="0" readonly> </div> <div class="maling_rekke"> <div class="maling_ramme"> <img class="maling_billede maling_felt" src="spand2.jpg" alt="Maling type A"> </div> <p class="maling_type maling_felt">Yunik Træmaling</p> <p class="maling_pris">200 kr.</p><input type="hidden" name="pris" value="200"> <p class="maling_felt">Antal:</p> <input class="maling_input maling_felt" type="text" name="antal" value="0"><br> <p class="maling_felt">Subtotal (inkl. moms):</p> <input class="maling_sub maling_felt" type="text" name="subpris" value="0" readonly> </div> <div class="maling_rekke"> <div class="maling_ramme"> <img class="maling_billede maling_felt" src="spand3.jpg" alt="Maling type A"> </div> <p class="maling_type maling_felt">Yunik Radiatormaling</p> <p class="maling_pris">300 kr.</p><input type="hidden" name="pris" value="300"> <p class="maling_felt">Antal:</p> <input class="maling_input maling_felt" type="text" name="antal" value="0"><br> <p class="maling_felt">Subtotal (inkl. moms):</p> <input class="maling_sub maling_felt" type="text" name="subpris" value="10" readonly> </div> </fieldset> <fieldset> <legend>Godkendt bestilling</legend> <div class="maling_rekke"> Total (inkl. moms): <input class="maling_totalt maling_felt" type="text" name="totpris" value="0" readonly> DKK.</br> <input class="maling_felt" type="checkbox" name="godkend" value="Bike">Jeg godkender hermed bestillingen<br> </div> </fieldset> <div class="knapper"> <input id="knap_nulstil" type="reset" value="Nulstil"> <input id="knap_bestil" type="submit" value="Send bestilling"> </div> </form> </div> <!-- Slut anden flexramme -->merge

一起使用
row.names

答案 2 :(得分:0)

使用cbind函数组合两个数据帧后,可以为新数据帧创建唯一的列名。

-xv

如果您打印出来,您将获得

a1 b1 a1.1 b2

1 1 a 4 d

2 2 b 5 e

3 3 c 6 f