我正在尝试制作不整洁的数据数据。我有以下格式的数据:
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中执行此操作?
我的第一个想法是找到spread
的方法,以便
name name2 x x2
a value NA 1
b value NA 2
c value NA 3
从那里我知道我可以unite
使用name
和name2
并删除列x
,但我不确定spread
是否可以产生上方。
答案 0 :(得分:4)
您可以对NA进行分组并进行总结,即
import Link from "gatsby-link"
render () {
<div>
<Link
to="/another-page/"
activeStyle={{
color: 'red'
}}
innerRef={(el) => { this.myLink = el }}
>
Another page
</Link>
</div>
}
给出,
library(dplyr) df %>% group_by(grp = cumsum(is.na(x))) %>% summarise(name = paste(name, collapse = '_'))
数据强>
# A tibble: 3 x 2
grp name
<int> <chr>
1 1 a_value
2 2 b_value
3 3 c_value
答案 1 :(得分:2)
使用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 <-
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))