目前尚不清楚您要如何处理重复项,但这是一个尝试,
library(dplyr)
library(tidyr)
df1 <- df[!duplicated(df[c('ID1', 'ID2')]),] %>%
group_by(ID1) %>%
spread(ID2, Value, fill = '')
df1
#Source: local data frame [2 x 4]
#Groups: ID1 [2]
# ID1 b k l
# <int> <chr> <chr> <chr>
#1 5 7 4
#2 6 2
要回到原来的我们需要gather
,即
df2 <- df1 %>%
gather(ID2, Value, b:l) %>%
filter(Value != '')
df2
#Source: local data frame [3 x 3]
#Groups: ID1 [2]
# ID1 ID2 Value
# <int> <chr> <chr>
#1 6 b 2
#2 5 k 7
#3 5 l 4
但是,我们缺少重复项,因此我们rbind
将它们添加到gather
ed 数据框,即
rbind(as.data.frame(df2), df[duplicated(df[c('ID1', 'ID2')]),])
# ID1 ID2 Value
#1 6 b 2
#2 5 k 7
#3 5 l 4
#21 5 k 2
在你澄清之后,如果你没有重复的话,
df1 <- df %>% group_by(ID1) %>% spread(ID2, Value, fill = '')
并回到原来的
df2 <- df1 %>% gather(ID2, Value, b:l) %>% filter(Value != '')