V1 ------> FA MA GA RA TA
我希望输出如下
column1 - > FA FA FA FA MA MA MA GA GA
column2 - > MA GA RA TA GA RA TA TA TA
答案 0 :(得分:0)
您可以使用combn
函数执行此操作,该函数会生成所有组合。例如,我们希望将a,b,c组合为两个元素:
v <- c("a", "b", "c")
combn(v, 2)
会产生组合矩阵:
[,1] [,2] [,3]
[1,] "a" "a" "b"
[2,] "b" "c" "c"
如果您希望此矩阵作为对的向量,则可以在列上应用paste
并将其折叠为“。” - 一个点:
apply(combn(v, 2), 2, function(x) paste(x, collapse = "."))
这将为您提供字符组合向量 - "a.b" "a.c" "b.c"
答案 1 :(得分:0)
列length
的行/元素的unique
组合生成的V1
将大于nrow
的{{1}}。因此,我不确定您希望如何在同一数据集上生成新列dat
。也许您可以使用单个列创建另一个数据框
V2
如果您需要将第一个值与所有其他值粘贴
dat2 <- data.frame(V2=combn(unique(dat$V1),2, FUN=paste, collapse="."), stringsAsFactors=FALSE)
dat2$V2
#[1] "FA.MA" "FA.GA" "FA.RA" "FA.TA" "MA.GA" "MA.RA" "MA.TA" "GA.RA" "GA.TA"
#[10] "RA.TA"
如果您需要 paste(dat$V1[1], dat$V1[-1], sep=".")
#[1] "FA.MA" "FA.GA" "FA.RA" "FA.TA"
,那么(如@aosmith所述)您可以这样做:
paste
dat2 <- as.data.frame(t(combn(unique(dat$V1),2)))
dat2
# V1 V2
#1 FA MA
#2 FA GA
#3 FA RA
#4 FA TA
#5 MA GA
#6 MA RA
#7 MA TA
#8 GA RA
#9 GA TA
#10 RA TA
答案 2 :(得分:0)
尝试:
> for(i in 1:(length(V1)-1))
V2[i] = paste(V1[1], V1[i+1],sep='.')
> V2
[1] "FA.MA" "FA.GA" "FA.RA" "FA.TA"