我的Dataframe看起来与此类似
Date Key Value1 Value2
D1 1A 2
D1 2A 1 2
D2 3B 1 3
D2 1A 3
D3 2A 5
正如您所看到的,Key
本身并非主要内容,但如果我们一起考虑Date
和Key
,则每次观察都会将其视为主键。
现在我希望在Value1
和Value2
都存在的每个观察中实现这一点,复制行并将它们分成两行。像这样:
Date Key Value1 Value2 Value
D1 1A 2 2
D1 2A 1 2 1
D1 2A 1 2 2
D2 3B 1 3 1
D2 3B 1 3 3
D3 2A 5 5
无论如何我能做到这一点吗? 提前谢谢。
答案 0 :(得分:1)
你可能想要这个:
df %>% gather(keys,Value,-Date,-Key) %>% filter(!is.na(Value)) %>% arrange(Date,Key)
Date Key keys Value
1 D1 1A Value1 2
2 D1 2A Value1 1
3 D1 2A Value2 2
4 D2 1A Value1 3
5 D2 3B Value1 1
6 D2 3B Value2 3
7 D3 2A Value1 5
答案 1 :(得分:0)
您也可以使用unnest
library(tidyverse)
df %>%
rowwise %>%
mutate(Value3 = ifelse(is.na(Value2),list(Value1),list(c(Value1,Value2)))) %>%
unnest
# # A tibble: 7 x 5
# Date Key Value1 Value2 Value3
# <chr> <chr> <int> <int> <int>
# 1 D1 1A 2 NA 2
# 2 D1 2A 1 2 1
# 3 D1 2A 1 2 2
# 4 D2 3B 1 3 1
# 5 D2 3B 1 3 3
# 6 D2 1A 3 NA 3
# 7 D3 2A 5 NA 5
数据强>
df <- read.table(text="
Date Key Value1 Value2
D1 1A 2 NA
D1 2A 1 2
D2 3B 1 3
D2 1A 3 NA
D3 2A 5 NA",h=T,strin=F
)