我想合并我的数据集的两列。这两列的性质是/或,即如果一个列中存在一个值,它将不会出现在其他列中。 我试过这些
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
编辑 - 请注意,我不希望将列c
与a
和$b
答案 0 :(得分:4)
使用stri_list2matrix
,fill
''
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(paste
(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"
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"