R 将2个变量重新编码为一行一个

R 将2个变量重新编码为一行一个,r,dplyr,R,Dplyr,假设我有一个DF,比如: df=data.frame(a=c(0,0,1,1),b=c(0,1,0,1)) 只有它有很长的行数。我想根据a和b的同时值创建一列,例如 df a b c 0 0 10 0 1 11 1 0 12 1 1 13 我认为这可以通过内部连接完成,使用sqldf或者dplyr;有没有更快的方法,有没有图书馆 提前感谢,p您可以: library(dplyr) df %>% mutate(newcol = paste0(a, b)) 取决于您希

假设我有一个DF,比如:

df=data.frame(a=c(0,0,1,1),b=c(0,1,0,1))
只有它有很长的行数。我想根据a和b的同时值创建一列,例如

df
a  b  c
0  0  10
0  1  11
1  0  12
1  1  13
我认为这可以通过内部连接完成,使用sqldf或者dplyr;有没有更快的方法,有没有图书馆

提前感谢,p

您可以:

library(dplyr)
df %>% mutate(newcol = paste0(a, b))
取决于您希望如何标记新列

如果您有一个所需值的向量,我们称之为查找:

lookup <- 10:100
df %>% mutate(newcol = lookup[as.factor(paste0(a, b))])

超级欺诈,仅适用于本例,但:

df$c我想你的意思是,你有一些其他的数据框架,比如说,有一个c列的字典,你在字典中查找a,b,然后从那里获取c

df=data.frame(a=c(0,0,1,1),b=c(0,1,0,1))
dictionary <- df
dictionary$c <- 10:13
dictionary <- dictionary[sample(4), ] # shuffle it just to prove it works
这将从字典中获取匹配的c列,并将其链接到df中。如果字典中没有匹配的a,b,all.x会在那里放一个NA

如果速度成为一个问题,您可以尝试data.table


很抱歉,paste0没有创建我要查找的特定值10..13,是吗?仅合并2列?您是如何确定这些值的,从10开始并不断增加?不确定您是如何确定c列的值的。这有关系吗?这就是为什么它被称为重新编码,你只需决定你想要的项目值是的,因为df$c可能类似于librarydigest;df$c创建一个数据框,其中包含a/b值和预期的c值之间的映射。然后使用“合并”将两者合并。它会让你控制命名为c,不管你想怎么说,只适用于这一个…..感谢我们所有的时间,我今天早上9点回到工作时发现了这些条目。是的,这是一个查找,是的,用于两个变量,而不仅仅是一个。现在让我测试一下!
merge(df, dictionary, merge=c('a', 'b'), all.x=T)
library(data.table)
setDT(df)         # convert to data.table
setDT(dictionary) # convert to data.table
# set key
setkey(df,a,b)
setkey(dictionary,a,b)
# merge
dictionary[df] # will be `df` with the `c` column added, `NA` if no match