一点背景:
我有一个约有1万行和5列的数据框,该数据框是从SQL数据库中导入的。这些列中的一列包含一个URL,其余列包含一些其他变量,即整数和字符的组合。这是表格的示例,每列的类都放在方括号中:
URL(char) A(char) B(char) C(int)
1 http:// ab gh 11
2 http:// cd ij 14
3 http:// ef kl 11
...
在将SQL Server中的表读入R时,我没有使用stringsAsFactors,因为我要做的部分工作是分解URL以便从中提取几个字符串:
太酷了,我打算将正则表达式和grep所需的内容从URL中删除,并为每个URL新建一个列。这是我为城市所做的一个示例。
dF$city= str_extract_all(string = dF$source_url, pattern = "newyork|los_angeles|chicago|houston|philadelphia|phoenix|san_antonio|san_diego|dallas")
完成后,数据框将如下所示:
URL(char) A(char) B(char) C(int) City(list) Occupation(list) Salary(list)
1 http:// ab gh 11 NY programmer 90
2 http:// cd ij 14 SF ditch digger 85
3 http:// ef kl 11 LA programmer 88
...
凉爽的。现在,我感觉很好,并决定运行摘要统计信息。具体来说,我想查找清单上每个职业的平均工资(大约有十二种不同的类型,并且所有拼写都统一)。由于我仍然无法理解R中的循环,因此我一直在撞墙–我将如何计算出每个城市和职业如何获得平均薪水?
请注意,我正在尝试将stringsAsFactors设置为false,以便我可以对URL的必要部分进行正则表达式/ grep。
有没有人有什么建议?
这是一个简化的版本,其中数据框仅具有“ A”,“城市”,“职业”和“薪水”。薪水有简单的数字,因此您可以快速直观地检查结果是否正确。
这实际上很简单(手指交叉)。您只需要使用unlist
。
另一件事,我不会太在意使用因素,也不会觉得您必须使用它们。在这种情况下,根本不需要任何因素。
无论如何,这是代码:
library('dplyr')
library('stringr')
本source_URL
应该有希望是这样的,你有什么:
source_URL <- c('NYblahditch digger10', 'NYhassomeprogrammermaking20', 'IheartNYditch digger30', 'NYnotNJprogrammer40', 'SFsmellsditch diggers50', '60programmerSF', 'ditch diggerInSFmakes70kayear', 'SFarewedoneyet80programmer')
现在我们创建数据框:
df <- data.frame(A=c('ab', 'cd', 'ef', 'gh', 'ij', 'kl', 'mn', 'op'))
df$City <- unlist(str_extract_all(string = source_URL, pattern = "NY|SF"))
df$Occupation <- unlist(str_extract_all(string = source_URL, pattern = "ditch digger|programmer"))
df$Salary <- as.numeric(unlist(str_extract_all(string = source_URL, pattern = '10|20|30|40|50|60|70|80')))
检查以确保数据框看起来像您需要的样子才能继续:
> str(df)
'data.frame': 8 obs. of 4 variables:
$ A : Factor w/ 8 levels "ab","cd","ef",..: 1 2 3 4 5 6 7 8
$ City : chr "NY" "NY" "NY" "NY" ...
$ Occupation: chr "ditch digger" "programmer" "ditch digger" "programmer" ...
$ Salary : num 10 20 30 40 50 60 70 80
现在投入dplyr
使用:
df1 <- group_by(df, City, Occupation) %>%
summarise(Mean_Wage = mean(Salary))
..结果如下:
> df1
Source: local data frame [4 x 3]
Groups: City
City Occupation Mean_Wage
1 NY ditch digger 20
2 NY programmer 30
3 SF ditch digger 60
4 SF programmer 70
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句