[R] removing specified length of text after a period in dataframe of char's

Aidan Corcoran aidan.corcoran11 at gmail.com
Wed Dec 7 12:05:41 CET 2011


 Dear all,

 I'm trying to remove some text after the period (a decimal point) in
the data frame 'hi', below. This is one step in formatting a table. So
I would like e.g.
"2.0" to become "2"
and "5.3" to be "5.3",
where the variable digordered contains the number of digits after the
decimal that I would like to display, in the same order in which the
variables appear in hi. If it makes it easier to use, this info is
also contained in the dataframe nam2. The reason the numbers are
recorded as characters is because I used format to get a thousand
separator, which I also need.

The string manipulation functions in R generally don't seem to work
with matrices or data frames, so e.g.   regexpr("\\.",  hi[1,2]) works
but not regexpr("\\.", hi). Finding the location of the period and
then using substring was the approach I was thinking of taking, but
this would seem to need for loops here. I was wondering if anyone
knows any easier ways.

Thanks very much for any help!

Aidan


digordered<-  c(0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1)
f<-structure(list(c("GDP (LCU,bn)", "GDP ($, bn)", "GDP per capita (LCU)",
"Ratio to EZ GDP Per Cap", "Share of World GDP (Intl $, %)",
"Real GDP Growth (%)", "Population (mn)", "Unemployment Rate (%)",
"Ratio of Employed/Unemployed", "PPP Exchange Rate", "Nominal Exchange
Rate (LCU per $)",
"Inflation (%)", "Main Lending Rate to Private Sector (%)", "Claims on
Central Gov",
"Claims on Private Sector", "Bank Assets", "Regulator Capital to RWA",
"Tier 1 Capital to RWA", "Return on Equity", "Liquid Assets to ST Liabilities"
), `2005` = c(35662, 809, 32128, 0.1, 4.3, 9, 1110, 3.5, NA,
14.7, 44.1, 4, 10.8, 7, 15, 22835, NA, NA, NA, NA), `2009` = c(61240,
1265, 52163, 0.1, 5.2, 6.8, 1174, NA, NA, 16.8, 48.4, 10.9, 12.2,
14, 31, 47180, 13.6, 9, 10.8, 42.8), `2010` = c(75122, 1632,
63100, 0.1, 5.5, 10.1, 1191, NA, NA, 18.5, 45.7, 12, NA, 15,
39, 56787, 14.7, 9.9, 10.5, 41.1), `2011` = c(87455, 1843, 72461,
0.1, 5.7, 7.8, 1207, NA, NA, 19.6, NA, 10.6, NA, NA, NA, NA,
13.5, 9.3, 14.3, 35.8), `2012` = c(99459, 2013, 81313, 0.1, 5.9,
7.5, 1223, NA, NA, 20.5, NA, 8.6, NA, NA, NA, NA, NA, NA, NA,
NA)), .Names = c("", "2005", "2009", "2010", "2011", "2012"), row.names = c(NA,
20L), class = c("cast_df", "data.frame"))

  hi<-format(f,big.mark=",",scientific=F)
  regexpr("\\.",  hi) #don't know to get location of "." in a dataframe of chars


nam2<-  structure(list(var1 = c("GDP (LCU,bn)", "GDP ($, bn)", "GDP
per capita (LCU)",
"Ratio to EZ GDP Per Cap", "GDP per capita (Intl $)", "EU GDP per
capita (Intl $)",
"Share of World GDP (Intl $, %)", "Real GDP Growth (%)", "Population (mn)",
"Unemployment Rate (%)", "Ratio of Employed/Unemployed", "Employment (1000s)",
"Unemployment (1000s)", "PPP Exchange Rate", "Nominal Exchange Rate
(LCU per $)",
"Inflation (%)", "Main Lending Rate to Private Sector (%)", "Claims on
Central Gov",
"Claims on Private Sector", "Bank Assets", "Regulator Capital to RWA",
"Tier 1 Capital to RWA", "Return on Equity", "Liquid Assets to ST Liabilities",
"Reserves"), digi = c(0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0,
1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0)), .Names = c("var1", "digi"
), row.names = c("96", "97", "98", "110", "99", "100", "101",
"102", "103", "111", "112", "104", "105", "106", "107", "108",
"109", "114", "115", "113", "119", "120", "121", "122", "116"
), class = "data.frame")



More information about the R-help mailing list