R折叠列和格式

时间:2015-07-14 04:03:48

标签: r

假设我有一个看起来像这样的data.frame

1  5
9  12
34 38
10 40

如何折叠列,在两者之间放置一个分隔符,并添加例如字符" A"到了开始和" B"到最后,我会得到:

A1&5B
A9&12B
A34&38B
A10&40B

谢谢,

2 个答案:

答案 0 :(得分:2)

使用pastesprintf。请参阅?paste?sprintf

当你说"列表"时,你的意思是列表中的每个元素都是一个带有两个数字的字符串(例如x[[1]] = "1 5"),或者你的意思是你有一个数字矩阵(例如x[1, ] = c(1, 5))或..?

# e.g. if x is a dataframe
x <- data.frame(A=c(1, 9, 34, 10), B=c(5, 12, 38, 40))
sprintf('A%i&%iB', x$A, x$B)
# or
paste0("A", x$A, "&", x$B, "B") # paste0 has no separator; paste has a " " separator

或者假设您有很多列(不仅仅是A和B)并且不想手动输入它们,这会产生一个&#39;&amp;&#39;在一行中的每个值之间,然后粘贴&#34; A&#34;在前面和&#34; B&#34;在后面。

paste0("A", apply(x, 1, paste, collapse='&'), "B")

基本上这是沿着每一行(例如第一行是c(1, 5)),然后我们用&#39;&amp;&#39;来折叠内容。介于两者之间(paste(c(1,5), collapse="&"),然后我们将A和B粘贴到结果的任意一侧(paste0作为paste(..., sep="")的简写)。

答案 1 :(得分:1)

    df<-data.frame(a=c(1,9,34,10),b=c(5,12,38,40))
    data.frame(name=paste0("A",df$a,"&",df$b,"B"))