我有来自德国经济专家组(SOEP)的18个类似的数据框(每个代表一个调查年),该数据框是部分字符串和部分数字。变量(每个DF中超过200个)具有以下值
我已经尝试了sapply
- 命令,但是我收到的矩阵可以转换为没有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将整个(!)数据框的字符串变量更改为数字变量。输出应该是相同结构的数据框,所有变量都与之前一样,不是矩阵,不是列表。
任何帮助都将受到高度赞赏。
答案 0 :(得分:3)
我从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
你(似乎......)想要提取括号之间的任何内容。但[
是正则表达式语法中的特殊字符,因此您必须使用\\[
或\\]
来转义它。上面的代码更接近于只接受数字或括号之间的-
。