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行。因此,与柱子的熔化变得混乱。有其他选择吗?你能分享你用来融化的代码吗?