R 从连接的字符串中提取前n个字符

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,

我有一个包含两列的数据框: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, 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