【问题标题】:Concatenating two string variables in r在 r 中连接两个字符串变量
【发布时间】:2014-10-12 03:54:12
【问题描述】:

我已经看到很多关于使用 paste 和 paste0 连接 r 中的两个字符串的讨论。但是,这似乎不适用于两个字符串变量。我有一个如下所示的数据框。

    series_id   year    period  value   footnote_codes
1   LASBS260000000000003            1983    M01 15.1              
2   LASBS260000000000003            1983    M02 15.0              
3   LASBS260000000000003            1983    M03 14.8              
4   LASBS260000000000003            1983    M04 14.6

我希望将年份变量与周期变量结合起来,在数据框中生成一个名为观察的新变量。数据框称为数据,我根据类似查询的研究尝试了以下粘贴命令。

data$obs<-paste0(toString(data$year),toString(data$period))
data$obs<-paste(toString(data$year),toString(data$period),sep="")

这并没有像预期的那样给我预期的取值“1983M01”的单个变量。任何想法将不胜感激。

史蒂夫

【问题讨论】:

  • 它给了你什么?
  • 你为什么使用toString?您是否在未致电 paste 的情况下查看了这些值?
  • 阿南达,我怕有人问我这个问题。我不确定我得到了什么。数据集很大,当我尝试一个子集(7,000 obs)时,它仍然需要很长时间才能处理。我似乎得到了两组逗号分隔的变量,一组是年,另一组是月。我做了一个 class(data$obs) 调用,它只是在旋转。不管怎样,我得到的都是淹没我的记忆。
  • Richard,我正在从 toString 语句中获取字符向量。年份本身是一个整数,而周期是一个因素。我怀疑一个因素会被视为一个字符串,但我不确定。
  • 当我的列不是我认为的那样时,我遇到了类似的奇怪行为,例如,合作者不小心将数据框中的“列”替换为整个其他数据框。不用说,结果是出乎意料的行为

标签: r variables dataframe concatenation


【解决方案1】:

我遇到了上面提到的问题:我想将“年份”(数字)与一个字符串变量连接起来。作为解决方案,我使用“as.character”而不是“toString”,然后使用“paste0”连接变量。这对我有用。例如,

df$c&lt;-paste0(as.character(df$a)," ", as.character(df$b))

我知道这是一篇旧帖子。希望这对其他处于类似情况的用户有所帮助。

【讨论】:

  • 您的as.characters 是不必要的,例如,paste0(1:3, c("a", "b", "c")) 工作正常。
  • 另外,paste0 的意义在于它是一种快速插入空格的方法。插入空格是paste() 的默认值,所以如果你想用空格分隔你的术语,你可以paste(1:3, c("a", "b", "c")) 并让默认值起作用。或者在你的情况下df$c &lt;- paste(df$a, df$b)
【解决方案2】:

以下作品:

> apply(ddf,1 ,function(x) paste0(toString(x[2]), toString(x[3])))
[1] "1983M01" "1983M02" "1983M03" "1983M04"
> 
> apply(ddf,1 ,function(x) paste(toString(x[2]), toString(x[3])))
[1] "1983 M01" "1983 M02" "1983 M03" "1983 M04"

toString(ddf$year) 将整列绑定在一个字符串中:

> toString(ddf$year)
[1] "1983, 1983, 1983, 1983"
> 
> toString(ddf$period)
[1] "M01, M02, M03, M04"
> 
> paste(toString(ddf$year), toString(ddf$period))
[1] "1983, 1983, 1983, 1983 M01, M02, M03, M04"

【讨论】:

  • @mso,paste0 是 paste 的高效版本。 paste0(toString(x[2]), " ", toString(x[3])) 可以给出与粘贴行相同的输出。
  • MSO,您的连接代码有效,但是,在数据框中,我仍然使用以下命令得到类似“1983、1983、1983 M01、M02、Mo3”的结果。 data$obs
猜你喜欢
  • 2015-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多