如何替换列的每一行中的一个字符

时间:2018-03-31 17:56:54

标签: r replace stata

我有一个包含以下字符串的列:

1997.2 
1998.3 
2000.1 
2003.3
2008.4 

我想用.字母替换每个句点q

如何在R或Stata中执行此操作?

6 个答案:

答案 0 :(得分:2)

在R.

考虑您的字符串为x <- c("1997.2", "1998.3", "2000.1", "2003.3","2008.4"),然后您可以使用gsub来查找和替换。

> gsub("\\.", "q", x)
[1] "1997q2" "1998q3" "2000q1" "2003q3" "2008q4"

答案 1 :(得分:2)

另一个选项是chartr

中的R
chartr(".", "q", x)
#[1] "1997q2" "1998q3" "2000q1" "2003q3" "2008q4"

数据

x <- c("1997.2", "1998.3", "2000.1", "2003.3","2008.4")

答案 2 :(得分:2)

正如@ dash2暗示R,你在Stata中使用这样的字符串变量(不是列)会好得多。你需要一个季度日期变量,它在数字上是1960年第一季度的季度数,并按照你的要求格式化。在这里,我只使用季度日期的默认格式。

所有要点都记录在help datetime

 clear 
 input str6 yourproblem 
 1997.2 
 1998.3 
 2000.1 
 2003.3 
 2008.4
 end 

 gen yoursolution = yq(real(substr(yourprob, 1, 4)), real(substr(yourprob, -1, 1)))

 format yoursol %tq 

 list 

      +---------------------+
     | yourpr~m   yourso~n |
     |---------------------|
  1. |   1997.2     1997q2 |
  2. |   1998.3     1998q3 |
  3. |   2000.1     2000q1 |
  4. |   2003.3     2003q3 |
  5. |   2008.4     2008q4 |
     +---------------------+

这也有效:

gen alsoworks = quarterly(subinstr(yourprob, ".", " ", .), "YQ")
format alsoworks %tq 

答案 3 :(得分:1)

在Stata中,您可以使用subinstr()函数替换。

对于您的情况,您可以使用以下内容:

replace X = subinstr(X, ".", "q", .)

此处,X是您的字符串变量。通过在Stata中输入subinstr(),了解Stata帮助中的help subinstr()

答案 4 :(得分:1)

Stata的日期时间变量是带有特殊格式标签的整数,因此它们是可读的(例如,零是1960q1,一个是1960q2,依此类推)。这允许您使用时间序列命令,运算符和计算持续时间。我建议你把你的字符串转换成第一季度。如果您仍希望将数据保存为字符串,则第二种方法应该有效:

clear
input str8 str_yq
1997.2
1998.3
2000.1
2003.3
2008.4
end
gen yq = quarterly(str_yq,"YQ")
format yq %tq
gen yq2 = subinstr(str_yq,".","q",1)

答案 5 :(得分:1)

我认为这个帖子中提供的答案很好地涵盖了这个主题。

除了@Nick和@Dimitriy的出色回应,我想 仅使用substr()函数演示Stata中的相关方法:

clear

input str8 string1
1997.2
1998.3
2000.1
2003.3
2008.4
end

generate string2 = substr(string1, 1, 4) + "q" + substr(string1, 6, 1)

或者,如果你的年份长度在某些情况下没有确定,(比如说你 有97而不是1997)你可以将上面的内容与strpos()函数结合起来:

generate string3 = substr(string1, 1, strpos(string1, ".")-1) + "q" + ///
                   substr(string1, strpos(string1, ".")+1, 1)

在这两种情况下,结果都是一样的:

list

   +-----------------------------+
   | string1   string2   string3 |
   |-----------------------------|
1. |  1997.2    1997q2    1997q2 |
2. |  1998.3    1998q3    1998q3 |
3. |  2000.1    2000q1    2000q1 |
4. |  2003.3    2003q3    2003q3 |
5. |  2008.4    2008q4    2008q4 |
   +-----------------------------+

请注意,我的解决方案仅用于 paedagogical ,我还强烈建议您使用创建数字变量的方法。