将data.frame中的列与“/”符号合并

将data.frame中的列与“/”符号合并,r,dataframe,merge,R,Dataframe,Merge,例如,我有5列的data.frame: 1 AAA 123 12 33 0.23 2 BBB 3123 44 22 0.55 3 CCC 221 45 11 0

例如,我有5列的data.frame:

1 AAA     123             12              33           0.23                           
2 BBB     3123            44              22           0.55                           
3 CCC     221             45              11           0.44                          
我想从这个数据框中创建新的,如下所示:

    1 AAA     123/12         33/0.23                                      
    2 BBB     3123/44        22/0.55                                      
    3 CCC     221/45         11/0.44    
如何使用分隔符/合并第2列和第3列以及第4列和第5列


当然,变量应该是字符

我们可以循环遍历第二列和第四列索引,根据索引获取列并将其粘贴在一起,然后与原始数据集的第一列进行cbind

cbind(df[1], do.call(cbind, lapply(c(2,4), function(i) 
                   do.call(paste, c(df[i:(i+1)], sep="/")))))
或者另一个选择是tidyr的unite


我们可以循环遍历第二列和第四列索引,根据索引获取列并将其粘贴在一起,然后与原始数据集的第一列进行cbind

cbind(df[1], do.call(cbind, lapply(c(2,4), function(i) 
                   do.call(paste, c(df[i:(i+1)], sep="/")))))
或者另一个选择是tidyr的unite

这也可以做到:

cbind.data.frame(df[1:2], 
                 V3=paste(df[,3], df[,4],sep='/'),
                 V4=paste(df[,5], df[,6],sep='/'))

V1  V2      V3      V4
1  1 AAA  123/12 33/0.23
2  2 BBB 3123/44 22/0.55
3  3 CCC  221/45 11/0.44
这也可以做到:

cbind.data.frame(df[1:2], 
                 V3=paste(df[,3], df[,4],sep='/'),
                 V4=paste(df[,5], df[,6],sep='/'))

V1  V2      V3      V4
1  1 AAA  123/12 33/0.23
2  2 BBB 3123/44 22/0.55
3  3 CCC  221/45 11/0.44
这个怎么样:

cbind(df[,1], sapply(c(2,4), function(x)  paste0(df[,x],"/",df[,x+1])))
这个怎么样:

cbind(df[,1], sapply(c(2,4), function(x)  paste0(df[,x],"/",df[,x+1])))

你用粘贴函数试过了吗?libraryzoo在这里很有用…像cbinddf[1],trollapplytdf[-1],2,by=2,paste,collapse='/'应该也能用。你用粘贴函数试过了吗?libraryzoo在这里很有用…像cbinddf[1],trollapplytdf[-1],2,by=2,paste,collapse='/'应该也能用。@Dan[1]如果第一列中有“AAA”,“BBB”等,那么它仍然是一个data.frame,当我们用Lappy的输出绑定时,它仍然是一个data.frame,在Lappy中,我们按列索引2和4循环,然后我们添加i:i+1,即2:3和4:5,将“df”的列子集,并将其粘贴在一起。值得注意的是,第一个解决方案可以在有更多c的情况下以编程方式进行扩展列,例如:seq2,ncoldf,2而不是c2,4。@Dan_yef The df[1]如果第一列中有“AAA”,“BBB”等,那么它仍然是一个data.frame,当我们用Lappy的输出绑定时,它仍然是一个data.frame,在Lappy中,我们按列索引2和4循环,然后我们添加i:i+1,即2:3和4:5,将“df”的列子集,并将其粘贴在一起。值得注意的是,第一个解决方案可以在有更多c的情况下以编程方式进行扩展列,例如:seq2,ncoldf,2而不是c2,4。尝试对100列执行此操作。尝试对100列执行此操作。