r 使用带有 NA 的行来 reshape 数据以识别新列

标签 r dataframe reshape

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

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

我想把它改造成:
rDF <- data.frame(name=c("b","c","d","e","f"),
                  x=c(1,2,3,4,5),
                  head=c("A","A","A","B","B"))

其中第一行带有 NA标识一个新列,并使用该“行值”直到下一行带有 NA ,然后更改“行值”。

我都试过了 spreadmelt ,但它没有给我我想要的。
library(tidyr)
DF %>% spread(name,x)
library(reshape2)
melt(DF, id=c('name'))

有什么建议?

最佳答案

这是一个可能的 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

或者按照@Arun 的建议,只需使用 data.table
na.omit(setDT(DF)[, head := name[is.na(x)], by=cumsum(is.na(x))])

关于r 使用带有 NA 的行来 reshape 数据以识别新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29943153/

相关文章:

python - 过滤列值并收到 future 警告和类型错误?

r - 使用 melt 将数据合并到一个长列中

r - 如何在 R 中多次成功使用 reshape() 函数?

使用 replace_with_na 函数用 NA 替换范围外的值

根据不同数据帧中的值重新编码第二个数据帧中的值

python - 如何从 apply 返回格式正确的 pandas 数据框?

reshape R 中的数据(宽 -> 长)

r - 使用双 for 循环将表传递到列表矩阵中

r - 比较第 1 列(第 1 列)中的连续值并使用第 1 列后比较结果创建新列(第 2 列)

python - 相互比较相应的列并将结果存储在新列中