假设我有一个看起来像这样的data.frame
1 5
9 12
34 38
10 40
如何折叠列,在两者之间放置一个分隔符,并添加例如字符" A"到了开始和" B"到最后,我会得到:
A1&5B
A9&12B
A34&38B
A10&40B
谢谢,
答案 0 :(得分:2)
使用paste
或sprintf
。请参阅?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"))