我在R中有一个数据框,其中包含有关NBA球员的信息,包括薪资信息。薪水栏中的所有数据都有一个" $"在值之前,我想将字符数据转换为数字以进行分析。所以我需要删除" $"在这个专栏中。但是,我无法对此列中的任何值进行子集化或解析。似乎每个值都是1的向量。我已经包含在数据结构下面以及我在尝试删除" $"时尝试过的内容。
> str(combined)
'data.frame': 588 obs. of 9 variables:
$ Player: chr "Aaron Brooks" "Aaron Gordon" "Aaron Gray" "Aaron Harrison" ...
$ Tm : Factor w/ 30 levels "ATL","BOS","BRK",..: 4 22 9 5 9 18 1 5 25 30 ...
$ Pos : Factor w/ 5 levels "C","PF","PG",..: 3 2 NA 5 NA 2 1 1 4 5 ...
$ Age : num 31 20 NA 21 NA 24 29 31 25 33 ...
$ G : num 69 78 NA 21 NA 52 82 47 82 13 ...
$ MP : num 1108 1863 NA 93 NA ...
$ PER : num 11.8 17 NA 4.3 NA 5.6 19.4 18.2 12.7 9.2 ...
$ WS : num 0.9 5.4 NA 0 NA -0.5 9.4 2.8 4 0.3 ...
$ Salary: chr "$2000000" "$4171680" "$452059" "$525093" ...
combined[, "Salary"] <- gsub("$", "", combined[, "Salary"])
上面的最后一行代码能够成功运行,但它并没有增加&#34; Salary&#34;柱。
我能够通过运行下面列出的代码成功地扩充它,但我需要找到一种方法来自动化整个数据集的替换过程,而不是逐行进行。
combined[, "Salary"] <- gsub("$2000000", "2000000", combined[, "Salary"])
如何在此列中对字符向量进行子集以删除&#34; $&#34;?对于任何格式化错误道歉,这是我第一次提出问题。干杯,
答案 0 :(得分:2)
$
是一个元字符,表示字符串的结尾。因此,我们需要转义(\\$
)或将其放在方括号("[$]"
)中或使用fixed = TRUE
中的sub
。我们不需要gsub
,因为每个字符串中似乎只有一个$
字符。
combined[, "Salary"] <- as.numeric(sub("$", "", combined[, "Salary"], fixed=TRUE))
或者在评论中提到@gung,使用substr
会更快
as.numeric(substr(d$Salary, 2, nchar(d$Salary)))