我有一个包含多个变量的数据框。我想要的是使用( concatenation )变量名创建一个字符串,但在它们之间还有其他东西......
这是一个简化的例子(变量数量减少到只有3个,而我实际上有很多)
制作一些数据框
df1 <- data.frame(1,2,3) # A one row data frame
names(df1) <- c('Location1','Location2','Location3')
实际代码......
len1 <- ncol(df1)
string1 <- 'The locations that we are considering are'
for(i in 1:(len1-1)) string1 <- c(string1,paste(names(df1[i]),sep=','))
string1 <- c(string1,'and',paste(names(df1[len1]),'.'))
string1
这给...
[1] "The locations that we are considering are"
[2] "Location1"
[3] "Location2"
[4] "Location3 ."
但我想要
我们正在考虑的地点是Location1,Location2和Location3。
我相信有一种更简单的方法,你们中的一些人会知道...... 谢谢你的时间......
答案 0 :(得分:22)
您是否正在寻找collapse
的{{1}}参数?
paste
答案 1 :(得分:5)
这些是data.frame的名称这一事实并不重要,因此我已将该部分撤出并将其分配给变量strs
。
strs <- names(df1)
len1 <- length(strs)
string1 <- paste("The locations that we are considering are ",
paste(strs[-len1], collapse=", ", sep=""),
" and ",
strs[len1],
".\n",
sep="")
这给出了
> cat(string1)
The locations that we are considering are Location1, Location2 and Location3.
请注意,如果strs
中只有1个元素,则不会提供合理的英语。
我们的想法是在它们之间用逗号空格折叠除最后一个字符串之外的所有字符串,然后将它与样板文本和最后一个字符串一起粘贴。
答案 2 :(得分:2)
如果你的主要目标是将结果打印到屏幕(或其他输出),那么使用cat
函数(其名称来自连接):
> cat(names(iris), sep=' and '); cat('\n')
Sepal.Length and Sepal.Width and Petal.Length and Petal.Width and Species
如果需要带字符串的变量,则可以将paste
与collapse
参数一起使用。 sprintf
函数也可用于将字符串插入其他字符串(或将数字插入字符串)。
答案 3 :(得分:0)
其他选择是:
library(stringr)
str_c("The location that we are consiering are ", str_c(str_c(names(df1)[1:length(names(df1))-1], collapse=", "), names(df1)[length(names(df1))], sep=" and "))