我有一个约800万行的表。该表有15列带有数字值,但这些值只能是0
和另一个数字值specific for that column
。我想为每个列创建两个基于specific value
的新列。这些新值总是特定于列。
这是一个虚拟的例子,我的数据看起来如何:
mydf1 <- data.frame(ID=1:5, c1n=c(0,1,0,0,1), c2n=c(2,0,2,0,0), c3n=c(0,0,0,3,3))
这是我想要的输出
> mydf2
ID c1n c1n_ctr c1n_cas c2n c2n_ctr c2n_cas c3n c3n_ctr c3n_cas
#1 1 0 0 0 2 25 55 0 0 0
#2 2 1 10 100 0 0 0 0 0 0
#3 3 0 0 0 2 25 55 0 0 0
#4 4 0 0 0 0 0 0 3 580 1002
#5 5 1 10 100 0 0 0 3 580 1002
对应关系始终相同,即c1n
中的值1为(10,100)
,c2n
中的值2为(25,55)
,值{{1} 3
中的}是c3n
。
我知道我可以使用类似的东西
(580, 1002)
但是我的真实数据有15列,并且会粘贴很多副本,是否有任何清洁的方法?
答案 0 :(得分:1)
假设您必须以某种方式写下具体值,那么可以使用此方法。
library(dplyr)
mydf1 <- data.frame(ID=1:5, c1n=c(0,1,0,0,1), c2n=c(2,0,2,0,0), c3n=c(0,0,0,3,3))
c1 <- data.frame(c1n=1, c1n_ctr=10, c1n_cas=100)
c2 <- data.frame(c2n=2, c2n_ctr=25, c2n_cas=55)
c3 <- data.frame(c3n=3, c3n_ctr=580, c3n_cas=1002)
mydf3 <-
mydf1 %>%
left_join(c1) %>%
left_join(c2) %>%
left_join(c3) %>%
mutate_if(is.numeric, funs(ifelse(is.na(.), 0, .)))