R 根据条件复制和复制行

R 根据条件复制和复制行,r,R,我的数据帧与此类似 Date Key Value1 Value2 D1 1A 2 D1 2A 1 2 D2 3B 1 3 D2 1A 3 D3 2A 5 正如你所看到的,键本身不是主要的,但是如果我们考虑“代码>日期和键,每个观察都会发现它是主键。 现在,我想实现的是,对于同时存在Value1和Value2的每个观察,复制该行并将其分成两行。大概是这样的: Date Ke

我的数据帧与此类似

 Date   Key  Value1  Value2
   D1   1A     2
   D1   2A     1      2
   D2   3B     1      3
   D2   1A     3
   D3   2A     5

正如你所看到的,键本身不是主要的,但是如果我们考虑“代码>日期<代码>和<代码>键<代码>,每个观察都会发现它是主键。 现在,我想实现的是,对于同时存在

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
我有没有办法做到这一点?
提前谢谢。

您可能想要:

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

您还可以使用
unest

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
库(tidyverse)
df%>%
行%>%
变异(Value3=ifelse(is.na(Value2)、list(Value1)、list(c(Value1、Value2)))%>%
不耐烦
##tibble:7 x 5
#日期键值1值2值3
#          
#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
)

df是您要查找的
列吗?可能会考虑吗?我试过MELT(),问题是,在实际数据文件中,我的列数接近30,几乎有200000行。因此,与柱子的熔化变得混乱。有其他选择吗?你能分享你用来融化的代码吗?