如何将“标题”行转换为新列

时间:2019-11-18 14:23:33

标签: r multiple-columns

我有数据(不完全从PDF导入),所有数据都放在一个列中,某些行作为描述性标题。例如:

dfx <- data.frame(V1 = c("Box 1", "abcd10", "bcde15", "Box 2", "cdefg35", "jklm40", "nopq50", "rstu52"))

       V1
1   Box 1
2  abcd10
3  bcde15
4   Box 2
5 cdefg35
6  jklm40
7  nopq50
8  rstu52

我想创建一个单独的列,其中每个观察值取其上方最近的标题的值。像这样:

       V1    v2
1  abcd10 Box 1
2  bcde15 Box 1
3 cdefg35 Box 2
4  jklm40 Box 2
5  nopq50 Box 2
6  rstu52 Box 2

我尝试过的一切都没有使我接近。任何帮助,将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:1)

通过R为底的想法可以是

i1 <- grepl('Box', dfx$V1)
dfx$new <- with(dfx, ave(V1, cumsum(i1), FUN = function(i) i[1]))
subset(dfx, !i1)

#       V1   new
#2  abcd10 Box 1
#3  bcde15 Box 1
#5 cdefg35 Box 2
#6  jklm40 Box 2
#7  nopq50 Box 2
#8  rstu52 Box 2

答案 1 :(得分:0)

您也可以这样做:

*.tex

答案 2 :(得分:0)

创建一个V2列,其Box行等于V1,其他行等于NA,然后使用na.locf0填写NA。最后删除V1框行。

library(zoo)

isBox <- grepl("Box", dfx$V1)
transform(dfx, V2 = na.locf0(replace(V1, !isBox, NA)))[ !isBox, ]

给予:

       V1    V2
2  abcd10 Box 1
3  bcde15 Box 1
5 cdefg35 Box 2
6  jklm40 Box 2
7  nopq50 Box 2
8  rstu52 Box 2