我需要在列中的两个文本字符串之间复制数字,"将其转置"到第一个文本字符串旁边的列,并在列的其余部分重复.数据集有数百行.

"对齐"(如放置NAs以更正数字位置)是不必要的,转置就足够了.

输入:

df1 <- structure(list(column1 = c("STOUT", "18", "9341", "4", "0,2005", 
"STOUT", "1", "9341", "25", "0,2004", "STIN", "7", "9341", "0,2003", 
"OFF", "7", "L(1)", "9342", "0,2005")), class = "data.frame", row.names = c(NA, 
-19L))

> print(df)
       column1
    1    STOUT
    2       18
    3     9341
    4        4
    5   0,2005
    6    STOUT
    7        1
    8     9341
    9       25
    10  0,2004
    11    STIN
    12       7
    13    9341
    14  0,2003
    15     OFF
    16       7
    17    L(1)
    18    9342
    19  0,2005

所需输出:

df2 <- structure(list(column1 = c("STOUT", "STOUT", "STIN", "OFF", "L(1)"
), column2 = c(18L, 1L, 7L, 7L, NA), column3 = c(9341L, 9341L, 
9341L, NA, 9342L), column4 = c(4L, 25L, NA, NA, NA), column5 = c(0.2005, 
0.2004, 0.2003, NA, 0.2005)), class = "data.frame", row.names = c(NA, 
-5L))

> print(df2)
  column1 column2 column3 column4 column5
1   STOUT      18    9341       4  0.2005
2   STOUT       1    9341      25  0.2004
3    STIN       7    9341      NA  0.2003
4     OFF       7      NA      NA      NA
5    L(1)      NA    9342      NA  0.2005

我在想Extracting a string between other two strings in R

但没有取得多大进展:-/

提前谢谢.

推荐答案

在基于正则表达式的逻辑上拆分:

(I)根据大写字母(即[A-Z])定义断点;您可能需要根据df1$column1中的预期断点修改图案.)

a <- split(df1$column1, cumsum(grepl('[A-Z]', df1$column1)))
a
$`1`
[1] "STOUT"  "18"     "9341"   "4"      "0,2005"

$`2`
[1] "STOUT"  "1"      "9341"   "25"     "0,2004"

$`3`
[1] "STIN"   "7"      "9341"   "0,2003"

$`4`
[1] "OFF" "7"  

$`5`
[1] "L(1)"   "9342"   "0,2005"

然后是rbind(),再填入NA:

(plyr::rbind.fill()需要一个数据帧,所以我使用lapply()调用as.data.frame()到每个列表元素.)

library(plyr)

plyr::rbind.fill(lapply(a,function(y){as.data.frame(t(y),stringsAsFactors=FALSE)}))
     V1   V2     V3     V4     V5
1 STOUT   18   9341      4 0,2005
2 STOUT    1   9341     25 0,2004
3  STIN    7   9341 0,2003   <NA>
4   OFF    7   <NA>   <NA>   <NA>
5  L(1) 9342 0,2005   <NA>   <NA>

R相关问答推荐

当y大于阈值和值范围时,在时间序列中突出显示区域

用apply/map/etch替换循环以加快速度

R图中的字体大小和字体样式(带有R底图)

手工PCA上的载体与输出双图不匹配

如何在四进制仪表板值框中显示值(使用shiny 的服务器计算)

R中具有gggplot 2的Likert图,具有不同的排名水平和显示百分比

从R导出全局环境中的所有sf(numrames)对象

如何直接从Fortran到R的数组大小?

R中插入符号训练函数的中心因子和尺度因子预测

移除仪表板Quarto中顶盖和车身之间的白色区域

在数组索引上复制矩阵时出错

我正在努力用R计算数据集中的中值逐步距离

try 将 colored颜色 编码添加到ggploly的标题中

绘制采样开始和采样结束之间的事件

R中有约束的优化问题:如何用复数和对数效益函数解决问题?

有没有可能用shiny 的书签恢复手风琴面板?

从R中发出的咕噜声中的BUG?

向R中的数据帧添加一列,该列统计另一列中每个唯一值的二进制观测值的数量

SHILINY中DT列的条件着色

将文本批注减少到gglot的y轴上的单个值