每隔一行展开一行,然后合并以在dplyr中追加行名
我正在尝试制作不整洁的数据。我有以下格式的数据:每隔一行展开一行,然后合并以在dplyr中追加行名,r,dplyr,R,Dplyr,我正在尝试制作不整洁的数据。我有以下格式的数据: name x a NA value 1 b NA value 2 c NA value 3 我希望它是在以下格式 name x a_value 1 b_value 2 c_value 3 如何在dplyr中执行此操作 我的第一个想法是想出一种方法来传播,这样 name name2 x x2 a value NA
name x
a NA
value 1
b NA
value 2
c NA
value 3
我希望它是在以下格式
name x
a_value 1
b_value 2
c_value 3
如何在dplyr中执行此操作
我的第一个想法是想出一种方法来传播,这样
name name2 x x2
a value NA 1
b value NA 2
c value NA 3
从那里我知道我可以使用
unite
进行name
和name2
并删除x
列,但我不确定spread
是否可以生成上述内容。您可以对NA进行分组和总结,即
library(dplyr)
df %>%
group_by(grp = cumsum(is.na(x))) %>%
summarise(name = paste(name, collapse = '_'))
这就给了,
使用
na.locf
,然后删除不需要的行:
library(dplyr)
library(zoo)
DF %>%
mutate(x = na.locf(x, fromLast = TRUE)) %>%
filter(name != "value")
给予:
name x
1 a 1
2 b 2
3 c 3
注
DF
library(dplyr)
library(zoo)
DF %>%
mutate(x = na.locf(x, fromLast = TRUE)) %>%
filter(name != "value")
name x
1 a 1
2 b 2
3 c 3
DF <-
structure(list(name = structure(c(1L, 4L, 2L, 4L, 3L, 4L), .Label = c("a",
"b", "c", "value"), class = "factor"), x = c(NA, 1L, NA, 2L,
NA, 3L)), .Names = c("name", "x"), class = "data.frame", row.names = c(NA,
-6L))