【问题标题】:R: Slope to extract numbers from multiple variables of string data in a complex numeric/string-mixed datasetR:从复杂数字/字符串混合数据集中的字符串数据的多个变量中提取数字的斜率
【发布时间】:2014-10-08 14:48:33
【问题描述】:

我有来自德国经济小组 (SOEP) 的 18 个类似的数据框(每个代表一个调查年份),其中一部分是字符串,一部分是数字。变量(每个 DF 中超过 200 个)具有以下值

  • 前 4 个是个人和家庭的数字标识符
  • 有些是数字“-2”到“12”
  • 有些是字符串类型 1,如“[1] Ja”或“[-2] Nein”
  • 有些是字符串类型 2,如“[1] Jan Vollzeit erwerbst”。或“[-2] trifft nicht zu”

我已经尝试了sapply-command,但是我收到了一个可转换为没有 4 个标识符变量的数据帧的矩阵,并且我的数字周围仍然有括号(PKAL06 是我的起始 DF)。

PKs <- sapply(PKAL06[5:225], function(PKAL06) substr (PKAL06,1,3)) 
PKsD <- data.frame(PKs)

我也尝试了与 gsub 的组合,但它只给了我 NA 而不是字符串。

PKas <- sapply(PKAL06, 
   function(PKAL06) as.numeric(gsub("([0-9]+).*$", "\\1", PKAL06)))

理想情况下,有人可以给我一个提示,告诉我如何通过提取括号之间的内容来告诉 R 将整个(!)数据帧的字符串变量更改为数字变量。输出应该是与之前所有变量相同结构的数据框,而不是矩阵,而不是列表。

任何帮助将不胜感激。

【问题讨论】:

  • 请考虑发布一些示例数据。

标签: r string numeric substr gsub


【解决方案1】:

我从SOEP website 得知数据是机密的,所以试试这个:

PKas <- sapply(PKAL06, 
   function(PKAL06) as.numeric(gsub("\\[([0-9|\\-]+)\\].+","\\1", PKAL06)))

上面的模式似乎适用于您的示例数据。

str <- c("[1] Ja","[-2] Nein")
as.numeric(gsub("\\[([0-9|\\-]+)\\].+","\\1",str))
# [1]  1 -2

str <- c("[1] Jan Vollzeit erwerbst.","[-2] trifft nicht zu")
as.numeric(gsub("\\[([0-9|\\-]+)\\].+","\\1",str))
# [1]  1 -2

您(似乎...)想要提取括号之间的内容。但是[ 是正则表达式语法中的一个特殊字符,所以你必须使用\\[\\] 对其进行转义。上面的代码更进一步,只接受括号中的数字或-

【讨论】:

  • “\[”和“//]”正是我所需要的,它完美地解决了我的问题。
猜你喜欢
  • 2015-12-29
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
  • 2013-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多