如何将字符向量拆分为数据框?

时间:2014-03-17 13:39:32

标签: r vector split dataframe

我对R来说还是比较新的,希望你能再次帮助我。我有一个长度为42000的字符向量。向量看起来像这样:

a <- c("blablabla-19960101T000000Z-1.tsv", "blablabla-19960101T000000Z-2.tsv", "blablabla-19960101T000000Z-3.tsv")

我想将矢量分割成一个如下所示的数据框:

Name        Date          no
blablabla   1996-01-01    1
blablabla   1996-01-01    2
blablabla   1996-01-01    3

我正在努力解决分裂以及数据框架的创建问题。有人可以帮我弄这个吗?谢谢!

4 个答案:

答案 0 :(得分:9)

DF <- data.frame(do.call(rbind, strsplit(a, "-", fixed=TRUE)))
DF[,2] <- as.Date(DF[,2] , format="%Y%m%d")
DF[,3] <- as.integer(gsub(".tsv", "", DF[,3], fixed=TRUE))

#         X1         X2 X3
#1 blablabla 1996-01-01  1
#2 blablabla 1996-01-01  2
#3 blablabla 1996-01-01  3

答案 1 :(得分:6)

也许是

library(reshape2)
colsplit(a, "\\-", names=c("A", "B", "C"))

          A                B     C
1 blablabla 19960101T000000Z 1.tsv
2 blablabla 19960101T000000Z 2.tsv
3 blablabla 19960101T000000Z 3.tsv

b <- colsplit(a, "[[:punct:]]|\\T|\\.", names=c("A", "B", "C", "D","E"))

          A        B       C D   E
1 blablabla 19960101 000000Z 1 tsv
2 blablabla 19960101 000000Z 2 tsv
3 blablabla 19960101 000000Z 3 tsv

然后

library(lubridate)
b$B <- ymd(b$B)

          A          B       C D   E
1 blablabla 1996-01-01 000000Z 1 tsv
2 blablabla 1996-01-01 000000Z 2 tsv
3 blablabla 1996-01-01 000000Z 3 tsv

str(b)
'data.frame':   3 obs. of  5 variables:
 $ A: chr  "blablabla" "blablabla" "blablabla"
 $ B: POSIXct, format: "1996-01-01" "1996-01-01" "1996-01-01"
 $ C: chr  "000000Z" "000000Z" "000000Z"
 $ D: int  1 2 3
 $ E: chr  "tsv" "tsv" "tsv"

答案 2 :(得分:3)

您可以几乎直接使用read.table,但您的日期格式与R将用于colClasses参数的日期格式不同。

没问题。只需指定您自己的class并继续: - )

## Create a class called "ymdDate"
setClass("ymdDate")
setAs("character", "ymdDate", function(from) as.Date(from, format="%Y%m%d"))

## Use `read.table` on your character vector. For convenience, I've
##   used `gsub` to get rid of the `.tsv` in before reading it in.
out <- read.table(text = gsub(".tsv$", "", a), header = FALSE, 
                  sep = "-", colClasses=c("character", "ymdDate", "integer"))
out
#          V1         V2 V3
# 1 blablabla 1996-01-01  1
# 2 blablabla 1996-01-01  2
# 3 blablabla 1996-01-01  3
str(out)
# 'data.frame':  3 obs. of  3 variables:
#  $ V1: chr  "blablabla" "blablabla" "blablabla"
#  $ V2: Date, format: "1996-01-01" "1996-01-01" "1996-01-01"
#  $ V3: int  1 2 3

答案 3 :(得分:0)

我知道我在这个聚会上迟到了,但我希望在<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> <link rel="stylesheet" href="<spring:theme code='color'/>" type="text/css" /> </head> <body> <a href="http://localhost:8084/SpringMVCP4/form.html?siteLang=hi">Hindi</a> <a href="http://localhost:8084/SpringMVCP4/form.html?siteLang=en">english</a> <center> <h1>${heading}</h1> </center> <h1>head</h1> <form action="/SpringMVCP4/submit" method="post"> <center> <table> <tr> <td><spring:message code="label.name"></spring:message></td> <td><input type="text" name="name"></input><span> <form:errors path="student.name"></form:errors></span></td> </tr> <tr> <td class="spring"><spring:message code="label.dob" /></td> <td><input type="text" name="dob"></input></td> </tr> <tr> <td><spring:message code="label.skillSet" /></td> <td><select name="skillSet" multiple> <option>java</option> <option>php</option> <option>.net</option> </select></td> </tr> <tr> <td><spring:message code="label.mobileNo" /></td> <td><input type="text" name="mobileNo"></input></td> </tr> <tr> <td><spring:message code="label.street" /></td> <td><input type="text" name="address.street"></input></td> </tr> <tr> <td><spring:message code="label.city" /></td> <td><input type="text" name="address.city"></input></td> </tr> <tr> <td><spring:message code="label.pincode" /></td> <td><input type="text" name="address.pincode"></input><span style="color: red"> <form:errors path="student.address.pincode" /></span></td> </tr> <tr> <td><spring:message code="label.submit" var="submit" /></td> <td><input type="submit" value="${submit}"></input></td> </tr> </table> </center> </form> </body> </html>管道中看到同样的想法,并使用更多magrittr个功能。这就是我所拥有的:

tidyverse