我有一个列表女巫看起来像那样:
created_time : chr "2015-12-30T04:04:09+0000"
from.name : chr "John"
message : chr "Lorem ipsum dolor sit amet"
created_time : chr "2015-12-30T04:04:09+0000"
from.name : chr "Peter"
message : chr "Ut labore et dolore magna aliqua"
created_time : chr "2016-12-30T04:04:09+0000"
from.name : chr "Mike"
message : chr "Nam at euismod risus"
我想像这样改变它......
created_time : char [1:3] "2015-12-30T04:04:09+0000" "2015-12-30T04:04:09+0000" "2016-12-30T04:04:09+0000"
from.name: char [1:3] "John" "Peter" "Mike"
message: char [1:3] "Lorem ipsum dolor sit amet" "Ut labore et dolore magna aliqua" "Nam at euismod risus"
这应该是一种简单的方法,但我无法找到。有什么帮助吗?
答案 0 :(得分:0)
以下是一些备选方案,假设前两个输入与Lines
中的输入相同,第三个输入与L
中的输入相同
1)这会给出一个数据框,其第一列是第一个字段,其余列是第一个字段的第二个字段。
Lines <- 'created_time : chr "2015-12-30T04:04:09+0000"
from.name : chr "John"
message : chr "Lorem ipsum dolor sit amet"
created_time : chr "2015-12-30T04:04:09+0000"
from.name : chr "Peter"
message : chr "Ut labore et dolore magna aliqua"
created_time : chr "2016-12-30T04:04:09+0000"
from.name : chr "Mike"
message : chr "Nam at euismod risus"'
DF <- read.table(text = Lines, sep = ":", as.is = TRUE)
aggregate(V2 ~ V1, DF, c)
2)下面的另一种可能性是生成一个数据框,每个create_time,from.name和message都有一列,第二个字段用逗号分隔它们。
read.dcf(textConnection(Lines), all = TRUE)
3)如果输入看起来像这样,而不是前面两点中的假设,那么使用split
:
L <- list(created_time = "2015-12-30T04:04:09+0000",
from.name = "John",
message = "Lorem ipsum dolor sit amet",
created_time = "2015-12-30T04:04:09+0000",
from.name = "Peter",
message = "Ut labore et dolore magna aliqua",
created_time = "2016-12-30T04:04:09+0000",
from.name = "Mike",
message = "Nam at euismod risus")
sapply(split(L, names(L)), c)
答案 1 :(得分:0)
请告诉我这是否是您正在寻找的内容:
l <- list(created_time="2015-12-30T04:04:09+0000",from.name="John",message="Lorem ipsum dolor sit amet",created_time="2015-12-30T04:04:09+0000",from.name="Peter",message="Ut labore et dolore magna aliqua",created_time="2016-12-30T04:04:09+0000",from.name="Mike",message="Nam at euismod risus");
str(l);
## List of 9
## $ created_time: chr "2015-12-30T04:04:09+0000"
## $ from.name : chr "John"
## $ message : chr "Lorem ipsum dolor sit amet"
## $ created_time: chr "2015-12-30T04:04:09+0000"
## $ from.name : chr "Peter"
## $ message : chr "Ut labore et dolore magna aliqua"
## $ created_time: chr "2016-12-30T04:04:09+0000"
## $ from.name : chr "Mike"
## $ message : chr "Nam at euismod risus"
ns <- unique(names(l));
res <- setNames(lapply(ns,function(n) unname(do.call(c,l[names(l)==n]))),ns);
str(res);
## List of 3
## $ created_time: chr [1:3] "2015-12-30T04:04:09+0000" "2015-12-30T04:04:09+0000" "2016-12-30T04:04:09+0000"
## $ from.name : chr [1:3] "John" "Peter" "Mike"
## $ message : chr [1:3] "Lorem ipsum dolor sit amet" "Ut labore et dolore magna aliqua" "Nam at euismod risus"
答案 2 :(得分:0)
我们可以使用split
l1 <- split(unlist(l, use.names=FALSE), names(l))
str(l1)
#List of 3
#$ created_time: chr [1:3] "2015-12-30T04:04:09+0000" "2015-12-30T04:04:09+0000" "2016-12-30T04:04:09+0000"
#$ from.name : chr [1:3] "John" "Peter" "Mike"
#$ message : chr [1:3] "Lorem ipsum dolor sit amet" "Ut labore et dolore magna aliqua" "Nam at euismod risus"
或另一种变体是
with(stack(l), split(values, ind))