当值在另一列中不存在时,合并R中的两列并替换

当值在另一列中不存在时,合并R中的两列并替换,r,R,我想合并数据集的两列,这两列的性质是要么/要么,即如果一个值出现在一列中,它就不会出现在另一列中。 我试过这些 temp<-list(a=1:3,b=10:14) paste(temp$a,temp$b) 还有这个 temp<-list(a=1:3,b=10:14,c=20:25) temp<-within(temp,a <- paste(a, b, sep='')) 但我要寻找的是在不存在值时替换它们。例如,temp$a只有1:3,而temp$b有10:14,即

我想合并数据集的两列,这两列的性质是要么/要么,即如果一个值出现在一列中,它就不会出现在另一列中。 我试过这些

temp<-list(a=1:3,b=10:14)
paste(temp$a,temp$b)
还有这个

 temp<-list(a=1:3,b=10:14,c=20:25)
 temp<-within(temp,a <- paste(a, b, sep=''))
但我要寻找的是在不存在值时替换它们。例如,temp
$
a只有1:3,而
temp
$b有10:14,即两个额外的值-因此我希望我的答案是

1_10 2_11 3_12 _13 _14

编辑-请注意,我不希望列
c
a
$b

连接,扩展较短向量的长度以匹配较长向量的长度,然后粘贴:

paste(c(temp$a,rep("",length(temp$b)-length(temp$a))), temp$b, sep="_")
#[1] "1_10" "2_11" "3_12" "_13"  "_14" 

使用
stri_list2matrix
,我们可以
'
填充长度较短的列表元素,并使用
粘贴

library(stringi)
do.call(paste, c(as.data.frame(stri_list2matrix(temp, fill='')), sep='_'))
#[1] "1_10" "2_11" "3_12" "_13"  "_14" 
stri_list2matrix(temp,fill='')
在用
'
填充长度较短的列表元素后,将
列表
转换为
矩阵
。将其转换为
data.frame
as.data.frame
),并使用
do.call(粘贴
to
paste
)将每行中由
分隔的元素粘贴到
sep='

更新 基于编辑的“临时”,如果您只对“临时”的前两个元素感兴趣

 do.call(paste, c(as.data.frame(stri_list2matrix(temp[1:2], fill='')),
         sep='_'))
 #[1] "1_10" "2_11" "3_12" "_13"  "_14" 

您还可以通过
名称
进行子集,即
temp[c('a','b')]

@SubhamTripathi我添加了一些描述。希望有帮助。您可以将代码分成更小的块并检查输出。您提出的解决方案将连接数据帧中的所有列,但我需要的是我只想连接数据集中的两个特定列,例如在temp中有三列a、b、c和I只想连接a,b。如何连接。P.s:我接受我的问题,没有细节:)@SubhamTripathi您可以在数据集中对列进行子集设置。例如,
do.call(粘贴,c(dat[c('a','b')],sep=“”)
但是,您在帖子中提到,您有一个长度不等的
列表。
library(stringi)
do.call(paste, c(as.data.frame(stri_list2matrix(temp, fill='')), sep='_'))
#[1] "1_10" "2_11" "3_12" "_13"  "_14" 
 do.call(paste, c(as.data.frame(stri_list2matrix(temp[1:2], fill='')),
         sep='_'))
 #[1] "1_10" "2_11" "3_12" "_13"  "_14"