粘贴时保持零

时间:2017-03-23 18:47:44

标签: r

我有下表。我需要通过组合" StateC"中的数字来获得如下所示的输出。专栏和" CountyC"列但保持5位数的总数。 (参见输出表中的列ID)

我怎样才能在R中实现这一目标?

提前致谢。

表1:

Year State StateC County CountyC Yield
1910  NE     1     Adams    1      10.1
1910  NE    31     Arthur  10      20.5
1910  NE    31     Boone   201     30.0

输出:

Year State StateC County CountyC  Yield    ID
1910  NE     1     Adams    1      10.1   31001
1910  NE    31     Arthur  10      20.5   31010
1910  NE    31     Boone  201      30.0   31201

3 个答案:

答案 0 :(得分:4)

这是sprintf()的任务:

Table1 <- read.table(header=TRUE, text=
'Year State StateC County CountyC Yield
1910  NE    31     Adams   1       10.1
1910  NE    31     Arthur  10      20.5
1910  NE    31     Boone   201     30.0')
Table1
Table1$ID <- sprintf("%02d%03d", Table1$StateC, Table1$CountyC)
Table1
#   Year State StateC County CountyC Yield    ID
# 1 1910    NE     31  Adams       1  10.1 31001
# 2 1910    NE     31 Arthur      10  20.5 31010
# 3 1910    NE     31  Boone     201  30.0 31201

答案 1 :(得分:0)

直接回答标题中问题的方法是使用stringr包中的str_pad

Table1$ID = with(Table1,paste(StateC,str_pad(CountyC,3,pad="0"),sep=""))

函数调用str_pad(CountyC,3,pad="0")填充CountyC列中的数字,以便它们被填0以具有长度3. @jogo的sprintf()解决方案更简洁(并且值得)被接受),但是如果你是R的新手,并且预计你将进行大量的字符串操作,那么了解stringr

是件好事。

答案 2 :(得分:0)

我们可以算术地做到这一点

Table1$ID <- with(Table1, 1e3*(StateC+CountyC/1e3))
Table1$ID
#[1] 31001 31010 31201

或者正如@MatthewLundberg所说,另一个简单的变化是

Table1$ID <- with(Table1, 1e3*StateC + CountyC)