我有下表。我需要通过组合" 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
答案 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)