r使用带NA的行重新整形数据以识别新列

Øys*_*and 3 r reshape dataframe

我在R中有一个数据集,如下所示:

DF <- data.frame(name=c("A","b","c","d","B","e","f"),
                 x=c(NA,1,2,3,NA,4,5))
Run Code Online (Sandbox Code Playgroud)

我想重塑成:

rDF <- data.frame(name=c("b","c","d","e","f"),
                  x=c(1,2,3,4,5),
                  head=c("A","A","A","B","B"))
Run Code Online (Sandbox Code Playgroud)

其中第一行带有NA标识新列的行,并将该"行值"带到下一行NA,然后更改"行值".

我曾经尝试都spreadmelt,但它并没有给我我想要的.

library(tidyr)
DF %>% spread(name,x)
library(reshape2)
melt(DF, id=c('name'))
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Dav*_*urg 5

这是一个可能的data.table/ zoo包组合解决方案

library(data.table) ; library(zoo)

setDT(DF)[is.na(x), head := name]
na.omit(DF[, head := na.locf(head)], "x")

#    name x head
# 1:    b 1    A
# 2:    c 2    A
# 3:    d 3    A
# 4:    e 4    B
# 5:    f 5    B
Run Code Online (Sandbox Code Playgroud)

或者正如@Arun所建议的,只是使用 data.table

na.omit(setDT(DF)[, head := name[is.na(x)], by=cumsum(is.na(x))])
Run Code Online (Sandbox Code Playgroud)