R 从连接的字符串中提取前n个字符
我有一个包含两列的数据框:id和value 我需要提取每个数字的前两位数字,以;分隔;。输出如下所示: 我们可以从stringr中使用str_-extract_-all 或者用str_替换所有 或者使用base R 我们可以从stringr中使用str_-extract_-all 或者用str_替换所有 或者使用base R 仅使用基本R:R 从连接的字符串中提取前n个字符,r,string,extract,R,String,Extract,我有一个包含两列的数据框:id和value 我需要提取每个数字的前两位数字,以;分隔;。输出如下所示: 我们可以从stringr中使用str_-extract_-all 或者用str_替换所有 或者使用base R 我们可以从stringr中使用str_-extract_-all 或者用str_替换所有 或者使用base R 仅使用基本R: df$value_2 = sapply(strsplit(df$value, ';'), function(i){ paste(substr(i,
df$value_2 = sapply(strsplit(df$value, ';'), function(i){
paste(substr(i, 1, 2), collapse = ';')
})
这将逐行进行,并用分号分隔每个字符串,然后提取前两个字符,并将它们返回到一个新字符串中,以分号分隔
这将为您提供:
id value value_2
1 1 123;21232;78678 12;21;78
2 2 4575;23423 45;23
3 3 1245;45757;45375;39873 12;45;45;39
4 4 787;536453;1121;3232;58684;2434 78;53;11;32;58;24
5 5 444;44444;4444;444 44;44;44;44
仅使用基本R:
df$value_2 = sapply(strsplit(df$value, ';'), function(i){
paste(substr(i, 1, 2), collapse = ';')
})
这将逐行进行,并用分号分隔每个字符串,然后提取前两个字符,并将它们返回到一个新字符串中,以分号分隔
这将为您提供:
id value value_2
1 1 123;21232;78678 12;21;78
2 2 4575;23423 45;23
3 3 1245;45757;45375;39873 12;45;45;39
4 4 787;536453;1121;3232;58684;2434 78;53;11;32;58;24
5 5 444;44444;4444;444 44;44;44;44
谢谢@akrun!我对dplyr解决方案感兴趣。但是,我注意到,当我查看带有结果的df数据时,新的列值_2如下所示:c12、21、78。有没有办法使其与列值的格式相同?谢谢@user9292的问题是str_extract_all返回向量列表而不是单个字符串。使用map,它将在列表上循环并将/str_c粘贴在一起谢谢@akrun!我对dplyr解决方案感兴趣。但是,我注意到,当我查看带有结果的df数据时,新的列值_2如下所示:c12、21、78。有没有办法使其与列值的格式相同?谢谢@user9292的问题是str_extract_all返回向量列表而不是单个字符串。使用map,它将在列表上循环并将/str_c粘贴在一起
trimws(gsub("(^|;)(..)[^;]+", "\\2;", df$value, perl = TRUE), whitespace = ";")
#[1] "12;21;78" "45;23" "12;45;45;39"
#[4] "78;53;11;32;58;24" "44;44;44;44"
df$value_2 = sapply(strsplit(df$value, ';'), function(i){
paste(substr(i, 1, 2), collapse = ';')
})
id value value_2
1 1 123;21232;78678 12;21;78
2 2 4575;23423 45;23
3 3 1245;45757;45375;39873 12;45;45;39
4 4 787;536453;1121;3232;58684;2434 78;53;11;32;58;24
5 5 444;44444;4444;444 44;44;44;44