如何在R中堆叠数据框

时间:2018-11-08 10:44:29

标签: r dataframe stack reformat

我有一个数据帧,我想将其堆叠在R中,以便最终得到三列。下面以当前格式显示一些示例数据。

    //CRYPTER CLASS TEST

    Crypter crypter = new Crypter();

    byte[] encrypted = crypter.encrypt("Hey how are you".getBytes(), crypter.KEYFACTORY_RSA, crypter.CHIPERINSTANCE_RSA_ECB_PKCS1PADDING);

    byte[] base64enc = Base64.encodeBase64(encrypted);

    System.out.println(new String(base64enc));
    System.out.println("");

    FileWriterUtil.getOutputStramWriter("F://filecrypt.txt", base64enc);

    String readed = FileReaderUtil.getBuffederString("F://filecrypt.txt");

    System.out.println(readed);


    for (int i = 0; i<encrypted.length; i++){
        if(Byte.compare(encrypted[i], Base64.decodeBase64(readed.getBytes())[i]) != 0) {
            System.out.println(encrypted[i] + "--" + readed.getBytes()[i]);

        }
    }

    System.out.println(encrypted.length + "--" + Base64.decodeBase64(readed.getBytes()).length);

    Crypter decrpter = new Crypter(crypter.publicKey, crypter.privateKey);


    byte[] decrypted = decrpter.decrypt(Base64.decodeBase64(readed.getBytes()), crypter.KEYFACTORY_RSA, crypter.CHIPERINSTANCE_RSA_ECB_PKCS1PADDING);

    System.out.println(new String(decrypted));

我最终希望将数据框设置为这样的格式,并以三列标题为“ Day”,“ Animal”和“ Count”:

> dput(df)
structure(list(Day = c("d1", "d2", "d3", "d4", "d5", "d6", "d7", 
"d8", "d9", "d10"), A1 = c(14L, 24L, 22L, NA, NA, NA, NA, NA, 
NA, NA), A2 = c(9L, 15L, 34L, 2L, 12L, 34L, 234L, 34L, NA, NA
), A3 = c(3L, 4L, 19L, 76L, 34L, 34L, 23L, 24L, 37L, 44L), A1.1 = c(34L, 
55L, 75L, 12L, 56L, 35L, 3L, 22L, NA, NA)), .Names = c("Day", 
"A1", "A2", "A3", "A1.1"), class = "data.frame", row.names = c(NA, 
-10L))

> df
   Day A1  A2 A3 A1.1
1   d1 14   9  3   34
2   d2 24  15  4   55
3   d3 22  34 19   75
4   d4 NA   2 76   12
5   d5 NA  12 34   56
6   d6 NA  34 34   35
7   d7 NA 234 23    3
8   d8 NA  34 24   22
9   d9 NA  NA 37   NA
10 d10 NA  NA 44   NA

我知道这应该是一件容易的事,但我确实在努力寻找解决方案。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:4)

使用dplyrtidyr

library(dplyr)
library(tidyr)
df <- df %>% 
  gather("animal", "count", -Day)


head(df)
#   Day animal count
# 1  d1     A1    14
# 2  d2     A1    24
# 3  d3     A1    22
# 4  d4     A1    NA
# 5  d5     A1    NA
# 6  d6     A1    NA

答案 1 :(得分:1)

您要使用reshape 2软件包also answered here的融合功能将数据帧从宽格式格式化为长格式

library(reshape2)

df <- structure(list(Day = c("d1", "d2", "d3", "d4", "d5", "d6", "d7", 
                       "d8", "d9", "d10"), A1 = c(14L, 24L, 22L, NA, NA, NA, NA, NA, 
                                                  NA, NA), A2 = c(9L, 15L, 34L, 2L, 12L, 34L, 234L, 34L, NA, NA
                                                  ), A3 = c(3L, 4L, 19L, 76L, 34L, 34L, 23L, 24L, 37L, 44L)), .Names = c("Day", 
                                                                                                                         "A1", "A2", "A3"), class = "data.frame", row.names = c(NA, -10L
                                                                                                                         ))
long_format <- melt(df)
colnames(long_format)[2:3] <- c("Animal","Count")

答案 2 :(得分:0)

可以通过基本R函数using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Xml; using System.Xml.Linq; namespace ConsoleApplication78 { class Program { static void Main(string[] args) { string ident = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><note></note>"; XDocument doc = XDocument.Parse(ident); XElement note = doc.Root; note.Add(new XElement("to", "Tove"), new XElement("example", new object[] { new XElement("from", new object[] { "Jani", new XElement("heading", "Reminder") }), new XElement("body","Don't forget me this weekend!") }) ); } } } 完成:

melt
相关问题