当值在另一列中不存在时,合并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(粘贴topaste
)将每行中由分隔的元素粘贴到
(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"