合并R中的两列,同时在其他列中不存在值时替换

时间:2015-06-17 04:55:21

标签: r

我想合并我的数据集的两列。这两列的性质是/或,即如果一个列中存在一个值,它将不会出现在其他列中。 我试过这些

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

输出

"1 10" "2 11" "3 12" "1 13" "2 14"

和这个

 temp<-list(a=1:3,b=10:14,c=20:25)
 temp<-within(temp,a <- paste(a, b, sep=''))

输出

temp$a
[1] "110" "211" "312" "113" "214"

但我正在寻找的是在它们不存在时替换它们。例如temp $ a只有1:3而temp $ b有10:14,即两个额外的值 - 所以我希望我的回答是

1_10 2_11 3_12 _13 _14

编辑 - 请注意,我不希望将列ca$b

连接起来

2 个答案:

答案 0 :(得分:4)

使用stri_list2matrixfill '' paste可以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='')

list
填充matrix中较短的列表元素length之后,

''会将data.frame转换为as.data.frame。将其转换为do.call(pastepaste),并使用_ sep='_' do.call(paste, c(as.data.frame(stri_list2matrix(temp[1:2], fill='')), sep='_')) #[1] "1_10" "2_11" "3_12" "_13" "_14" names分隔的每行中的元素。{/ { p>

更新

根据编辑过的&#39; temp&#39;,如果您只对“&temp;&#39;

的前两个元素感兴趣
temp[c('a', 'b')]

您也可以按{{1}} ie进行子集。 {{1}}

答案 1 :(得分:1)

展开较短矢量的长度以匹配较长矢量的长度,然后粘贴:

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