我在大excel
文件中有德国人口数据集,我只对德国地区的NUTS3级人口感兴趣,这是eurostat
提供的进一步的具体文件:NUTS classification。但是,基于NUTS3
规范,我打算提取具有特定模式的行。特别是,我需要提取country_code
de
之类的行,并计算任意三个数字或计算数字和字符的任意三种组合。
这是可重复性最小的例子:
structure(list(code=c(de1,de11,de111,de112,de11a,de11b,de12,de121,de27c,de3,
de4,de41,de411,de94h,dea,dea1,dea11,dea12,dec,Dec-01,Dec-06,
dee,dee01,dee02,dee0a,dee0b,dee0c),
region_name=c(Baden-Württemberg,Stuttgart,Stuttgart-Stadtkreis,Böblingen,
Schwäbisch Hall,Main-Tauber-Kreis,Karlsruhe,Baden-Baden- Stadtkreis,
Unterallgäu,Berlin,Brandenburg,Brandenburg - Nordost,
Frankfurt (Oder)- Kreisfreie Stadt,Wittmund,Nordrhein-Westfalen,
Düsseldorf,Düsseldorf- Kreisfreie Stadt,Duisburg- Kreisfreie Stadt,
Saarland,Saarbrücken- Stadtverband,Sankt Wendel,Sachsen-Anhalt,
Dessau-Roßlau- Kreisfreie Stadt,Halle (Saale)- Kreisfreie Stadt,
Mansfeld-Südharz,Saalekreis,Salzland),
pop_1980=c(2981,9131,3438,576,149,120,2368,49,114,...,...,...,...,53,16905,5178,589,
555,1063,364,90,...,...,...,...,...,...),
pop_1981=c(1981,9172,3450,576,149,120,2380,49,114,...,...,...,...,53,16910,5170,585,
553,1060,363,90,...,...,...,...,...,...,)))
这是我想要的输出(只是手动修剪):
更新:
在原始数据中,缺失值填充了...
,我希望过滤的数据。相应的...
框架将替换为NAN
或NULL
。
对于country_code
列中的相应模式,如何提取de
+计算三个数字或数字和字符的行?我怎样才能轻松地在R中实现这一点?有什么想法吗?
答案 0 :(得分:3)
编写正则表达式的一种方法是:de[[:alnum:]]{3}
。这意味着" d
后跟e
,后跟任意字母或数字正好3。关于[[:alnum:]]
的好处是它在非英语字符集方面更加强大。
使用正则表达式的方法有很多种。一些可能性(比如您的数据框称为d_f
):
# Base R
d_f[grepl("de[[:alnum:]]{3}", d_f$code,]
# dplyr
library(dplyr)
d_f %>%
filter(grepl("de[[:alnum:]]{3}", code))
R中有一个很好的R基本正则表达式使用摘要,您可以通过在控制台中键入?regex
来随时访问它。
答案 1 :(得分:2)
使用此代码查找符合条件的行号:
/usr/libexec/PlistBuddy -c "Print :DevicePreferences" ~/Library/Preferences/com.apple.iphonesimulator.plist | perl -lne 'print $1 if /^ (\S*) =/' | while read -r a; do /usr/libexec/PlistBuddy -c "Set :DevicePreferences:$a:ConnectHardwareKeyboard
false" ~/Library/Preferences/com.apple.iphonesimulator.plist || /usr/libexec/PlistBuddy -c "Add :DevicePreferences:$a:ConnectHardwareKeyboard
bool false" ~/Library/Preferences/com.apple.iphonesimulator.plist; done
这将查找带有“de”的字符串,后跟3个字母或数字的组合。
从数据框中提取:
grep( "de[a-zA-Z0-9]{3}", df$code)