R 将2个变量重新编码为一行一个
假设我有一个DF,比如: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=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