gpt4 book ai didi

r - 我需要将列 "transpose"中两个文本字符串之间的数字复制到第一个文本字符串旁边的列

转载 作者:行者123 更新时间:2023-12-02 18:09:29 25 4
gpt4 key购买 nike

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

“对齐”(例如放置 NA 来纠正数字位置)不是必需的,转置就足够了。

输入:

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

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

提前致谢。

最佳答案

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

(我根据大写字母的存在定义了断点(即 [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 - 我需要将列 "transpose"中两个文本字符串之间的数字复制到第一个文本字符串旁边的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72645348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com