当前位置: 首页 > 知识库问答 >
问题:

如何从一列中包含的文本构建Data.Frame?

红甫
2023-03-14

问题是需要将单行数据格式化为具有适当列的R data.frame以将行数据存储为列数据。原始数据格式是一个文本文件,有2行标题,N行数据。数据在单个列中。需要将其格式化为单独的列。基本上,如何将文本从每一列到另一列拆分为一个新的Data.Frame?

输入示例:

例如,输入包含两行,它们由组合的1)头名,2)子头名,以及N个包含一列所有数据的行组成,例如,RD,I,01,027,000,881,01,1,7,105,120,199,90103,00:00...

  RD Action.Code State.Code County.Code Site.ID Parameter POC Sample.Duration   Unit
1 RC Action Code State Code County Code Site ID Parameter POC            Unit Method
2 RD           I         01         027    0001     88101   1               7    105
3 RD           I         01         027    0001     88101   1               7    105
4 RD           I         01         027    0001     88101   1               7    105
5 RD           I         01         027    0001     88101   1               7    105
6 RD           I         01         027    0001     88101   1               7    105
  Method     Date        Start.Time   Sample.Value Null.Data.Code
1   Year   Period Number of Samples Composite Type   Sample Value
2    120 19990103             00:00                            AS
3    120 19990106             00:00                            AS
4    120 19990109             00:00                            AS
5    120 19990112             00:00          8.841               
6    120 19990115             00:00          14.92               
        Sampling.Frequency Monitor.Protocol..MP..ID Qualifier...1 Qualifier...2
1 Monitor Protocol (MP) ID            Qualifier - 1 Qualifier - 2 Qualifier - 3
2                        3                                                     
3                        3                                                     
4                        3                                                     
5                        3                                                     
6                        3                                                     
  Qualifier...3 Qualifier...4 Qualifier...5 Qualifier...6 Qualifier...7
1 Qualifier - 4 Qualifier - 5 Qualifier - 6 Qualifier - 7 Qualifier - 8
2                                                                      
3                                                                      
4                                                                      
5                                                                      
6                                                                      
  Qualifier...8  Qualifier...9                    Qualifier...10
1 Qualifier - 9 Qualifier - 10 Alternate Method Detectable Limit
2                                                               
3                                                               
4                                                               
5                                                               
6                                                               
  Alternate.Method.Detectable.Limit Uncertainty year
1                       Uncertainty          NA 1999
2                                            NA 1999
3                                            NA 1999
4                                            NA 1999
5                                            NA 1999
6                                            NA 1999
> 
> dput(pm_1999[1:20])
c(X..RD = "# RD,Action Code,State Code,County Code,Site ID,Parameter,POC,Sample Duration,Unit,Method,Date,Start Time,Sample Value,Null Data Code,Sampling Frequency,Monitor Protocol (MP) ID,Qualifier - 1,Qualifier - 2,Qualifier - 3,Qualifier - 4,Qualifier - 5,Qualifier - 6,Qualifier - 7,Qualifier - 8,Qualifier - 9,Qualifier - 10,Alternate Method Detectable Limit,Uncertainty", 
Action.Code = "# RC,Action Code,State Code,County Code,Site ID,Parameter,POC,Unit,Method,Year,Period,Number of Samples,Composite Type,Sample Value,Monitor Protocol (MP) ID,Qualifier - 1,Qualifier - 2,Qualifier - 3,Qualifier - 4,Qualifier - 5,Qualifier - 6,Qualifier - 7,Qualifier - 8,Qualifier - 9,Qualifier - 10,Alternate Method Detectable Limit,Uncertainty", 
State.Code = "RD,I,01,027,0001,88101,1,7,105,120,19990103,00:00,,AS,3,,,,,,,,,,,,,", 
County.Code = "RD,I,01,027,0001,88101,1,7,105,120,19990106,00:00,,AS,3,,,,,,,,,,,,,", 
Site.ID = "RD,I,01,027,0001,88101,1,7,105,120,19990109,00:00,,AS,3,,,,,,,,,,,,,", 
Parameter = "RD,I,01,027,0001,88101,1,7,105,120,19990112,00:00,8.841,,3,,,,,,,,,,,,,", 
POC = "RD,I,01,027,0001,88101,1,7,105,120,19990115,00:00,14.92,,3,,,,,,,,,,,,,", 
Sample.Duration = "RD,I,01,027,0001,88101,1,7,105,120,19990118,00:00,3.878,,3,,,,,,,,,,,,,", 
Unit = "RD,I,01,027,0001,88101,1,7,105,120,19990121,00:00,9.042,,3,,,,,,,,,,,,,", 
Method = "RD,I,01,027,0001,88101,1,7,105,120,19990124,00:00,5.464,,3,,,,,,,,,,,,,", 
Date = "RD,I,01,027,0001,88101,1,7,105,120,19990127,00:00,20.17,,3,,,,,,,,,,,,,", 
Start.Time = "RD,I,01,027,0001,88101,1,7,105,120,19990130,00:00,11.56,,3,,,,,,,,,,,,,", 
Sample.Value = "RD,I,01,027,0001,88101,1,7,105,120,19990202,00:00,13.68,,3,,,,,,,,,,,,,", 
Null.Data.Code = "RD,I,01,027,0001,88101,1,7,105,120,19990205,00:00,7.251,,3,,,,,,,,,,,,,", 
Sampling.Frequency = "RD,I,01,027,0001,88101,1,7,105,120,19990208,00:00,11.47,,3,,,,,,,,,,,,,", 
Monitor.Protocol..MP..ID = "RD,I,01,027,0001,88101,1,7,105,120,19990211,00:00,13.46,,3,,,,,,,,,,,,,", 
Qualifier...1 = "RD,I,01,027,0001,88101,1,7,105,120,19990214,00:00,46.20,,3,,,,,,,,,,,,,", 
Qualifier...2 = "RD,I,01,027,0001,88101,1,7,105,120,19990217,00:00,11.25,,3,,,,,,,,,,,,,", 
Qualifier...3 = "RD,I,01,027,0001,88101,1,7,105,120,19990220,00:00,,AN,3,,,,,,,,,,,,,", 
Qualifier...4 = "RD,I,01,027,0001,88101,1,7,105,120,19990223,00:00,,AN,3,,,,,,,,,,,,,"
)
> 

从R Studio环境中查看此资源,如下图所示。

共有1个答案

鲁涵意
2023-03-14

用逗号和rbind将字符串拆分为行。我们可以从第一行分配标题,并从DataFrame中删除该行。

#Split the data on comma and create a list
df <- do.call(rbind.data.frame, strsplit(pm_1999, ','))
#Assign headers from 1st row of the data
names(df) <- df[1, ]
#Remove the 1st row from the data
df <- df[-1, ]
 类似资料:
  • 最近我一直在写插件,然后使用ServiceLoader加载。为了让ServiceLoader找到我的插件,必须在META-INF/services/下的jar中包含一个文本文件。文本文件必须以ServiceLoader正在“寻找”的接口命名,并且必须包含实现类的规范名称。所有这些都工作得非常好,但是这种方法有一个非常烦人的问题:每次构建项目时,我都必须手动将 /services/文件夹以及文本文件

  • 我发现这个包只包含了3个主要的。java类中的一部分,其余的已经预编译在。class文件中了。当我试图编译它时,IntelliJ IDEA说它找不到定义,尽管它们显然在那里。我该怎么办? 编辑,因为它是我有2个问题。 1)在Main.java类中,IDE在例如时喊“不能解析符号”。 2)试图编译它时会说“java:不能找到符号” 好的。搜索了论坛后,我尝试将。class文件放在一个diferren

  • 我有一个充满json对象的表。只有一列“数据”。 我想将这个表转换成一个包含json对象中所有键的多列的表。 例如, 现在我的桌子是这样的: 但我希望它是这样的: 我不想以这种方式查询它,我想以我上面展示的格式完全创建一个新表。 我可以试试跑步: 但由于我的json对象有数百列,这可能效率低下。有没有更有效的方法?感谢您的帮助或建议。

  • 路径必须在生成的上下文中;您不能添加../something/something,因为docker构建的第一步是将上下文目录(和子目录)发送到docker守护进程。 我不想重组我的整个项目只是为了在这件事上容纳Docker。我想把我所有的Docker文件都保存在同一个子目录中。 此外,Docker似乎还不支持(可能永远也不支持)符号链接:Dockerfile ADD命令不跟随主机#1676上的符号

  • 问题内容: 如何使用Docker文件中的“ ADD”命令从Docker构建上下文之外包含文件? 从Docker文档中: 路径必须在构建上下文内;您不能添加../something/something,因为Docker构建的第一步是将上下文目录(和子目录)发送到docker守护程序。 我不想为了适应Docker而重组我的整个项目。我想将所有Docker文件保留在同一子目录中。 此外,似乎Docker

  • 我目前正在考虑将一个我开始用react-native开发的应用移植到CodenameOne。为此,我仍然在检查它的可行性和工作量(因为我必须将一些本机库绑定从react-native移植或开发到codenameone,因为codenameone忽略了我的一些需求,比如Socket.io支持)。免费的codenameone构建云服务仅限于1MB的应用程序,我必须在本地进行测试构建(只有几个测试类和使