将R中的一列数据帧转换为多列

将R中的一列数据帧转换为多列,r,dataframe,transform,reshape,transpose,R,Dataframe,Transform,Reshape,Transpose,目前,我的数据框由1列2326行组成。我想将数据帧转换为由11行组成。更具体地说,我当前的数据帧 John Doe 7 45 42 978 3 6 8 9 0 11 Sally Jenkins 2 等等 我希望我的数据框看起来像: John Doe 7 45 42 978 3 6 8 9 0 11 Sally Jenkins 2 每个人都是一行,然后他们的统计数据都是该行中单独的一列。有些人缺少一个统计数据,因此我无法根据每个人姓名之间的行数进行区分

目前,我的数据框由1列2326行组成。我想将数据帧转换为由11行组成。更具体地说,我当前的数据帧

John Doe
7
45
42
978
3
6
8
9
0
11
Sally Jenkins
2
等等

我希望我的数据框看起来像:

John Doe        7  45  42  978  3  6  8  9  0  11 
Sally Jenkins   2  
每个人都是一行,然后他们的统计数据都是该行中单独的一列。有些人缺少一个统计数据,因此我无法根据每个人姓名之间的行数进行区分

我尝试过使用
t()
以及
重塑(transform())
。你对下一步去哪里有什么建议吗

1)一个选项是基于字母表的存在创建一个分组变量,
通过创建
列表
输出来汇总
,并使用
最宽
将该
列表
更改为一组新列

library(dplyr)
library(tidyr)
library(stringr)
df1  %>%
      group_by(grp = cumsum(str_detect(col1, "[A-Za-z]"))) %>%
      group_by(coln = first(col1), .add = TRUE) %>%
      slice(-1) %>%
      summarise(out = list(as.list(as.numeric(col1))))  %>%
      unnest_wider(c(out)) %>%
      ungroup %>%
      select(-grp) %>%
      rename_at(-1, ~ str_c('new_col', seq_along(.)))
# A tibble: 2 x 11
#  coln          new_col1 new_col2 new_col3 new_col4 new_col5 new_col6 new_col7 new_col8 new_col9 new_col10
#  <chr>            <dbl>    <dbl>    <dbl>    <dbl>    <dbl>    <dbl>    <dbl>    <dbl>    <dbl>     <dbl>
#1 John Doe             7       45       42      978        3        6        8        9        0        11
#2 Sally Jenkins        2       NA       NA       NA       NA       NA       NA       NA       NA        NA
数据
df1使用末尾注释中重复定义的
DF
,确保
DF[[1]]]
为字符。然后使用
grep
创建一个逻辑变量
g
,每个输入行有一个元素,对于每个标题为TRUE,否则为FALSE。然后删除标题并使用
setNames
将其拆分,以设置结果列表的名称。最后,将每个列表组件转换为一个数值
ts
序列,因为这样的序列即使长度不同也可以标记。现在
cbind
。没有使用任何软件包

DF[[1]] <- as.character(DF[[1]]) 
g <- grepl("\\D", DF[[1]])
s <- setNames(split(DF[[1]][!g], cumsum(g)[!g]), DF[[1]][g])
t(do.call("cbind", lapply(s, function(x) ts(as.numeric(x)))))
注 可复制形式的输入假定为:

Lines <- "John Doe
7
45
42
978
3
6
8
9
0
11
Sally Jenkins
2"
DF <- read.table(text = Lines, as.is = TRUE, sep = ";")

行您到底尝试了什么?这些行应该对应什么?比如,如果一个人缺少一个统计数据,你怎么知道是哪一个?
DF[[1]] <- as.character(DF[[1]]) 
g <- grepl("\\D", DF[[1]])
s <- setNames(split(DF[[1]][!g], cumsum(g)[!g]), DF[[1]][g])
t(do.call("cbind", lapply(s, function(x) ts(as.numeric(x)))))
              [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
John Doe         7   45   42  978    3    6    8    9    0    11
Sally Jenkins    2   NA   NA   NA   NA   NA   NA   NA   NA    NA
Lines <- "John Doe
7
45
42
978
3
6
8
9
0
11
Sally Jenkins
2"
DF <- read.table(text = Lines, as.is = TRUE, sep = ";")