Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何删除字符串的一部分并为每一行列出值_R - Fatal编程技术网

R 如何删除字符串的一部分并为每一行列出值

R 如何删除字符串的一部分并为每一行列出值,r,R,我的数据是这样的 df <- structure(list(V = structure(c(4L, 5L, 3L, 7L, 6L, 2L, 1L), .Label = c("132BALT_ 26,172BALT_ 27,107BALT_ 57,104BALT_ 59,137BALT_ 60,133BALT_ 61,103BALT_ 62,134BALT_ 63,177BALT_ 100,123BALT_ 133,184BALT_ 168,109BALT_ 197,103BALT_ 198

我的数据是这样的

df <- structure(list(V = structure(c(4L, 5L, 3L, 7L, 6L, 2L, 1L), .Label = c("132BALT_ 26,172BALT_ 27,107BALT_ 57,104BALT_ 59,137BALT_ 60,133BALT_ 61,103BALT_ 62,134BALT_ 63,177BALT_ 100,123BALT_ 133,184BALT_ 168,109BALT_ 197,103BALT_ 198,173BALT_ 202,157BALT_ 203,143BALT_ 266,62BALT_ 342,62BALT_ 354,92BALT_ 355,195BALT_ 368,164BALT_ 370,52BALT_ 468,74BALT_ 469,71BALT_ 484,98BALT_ 494,66BALT_ 502,63BALT_ 601,133BALT_ 622", 
"135A,510A,511A,60BALT_ 23,67BALT_ 24,70BALT_ 25,95BALT_ 26,122BALT_ 27,123BALT_ 27,109BALT_ 60", 
"25A,28BALT_ 55,31BALT_ 56,45BALT_ 57,43BALT_ 58,5BALT_ 59,47BALT_ 59,6BALT_ 60,69BALT_ 60,66BALT_ 61", 
"267BALT_ 361,786BALT_ 363,543BALT_ 392", "563BALT_ 202,983BALT_ 360", "8BALT_ 1,12BALT_ 35,10BALT_ 71,9BALT_ 154,51BALT_ 179", 
"91BALT_ 26,117BALT_ 27,117BALT_ 28,102BALT_ 29,47BALT_ 31,96BALT_ 63,78BALT_ 64,133BALT_ 65,117BALT_ 66,121BALT_ 66,112BALT_ 67,127BALT_ 100"
), class = "factor")), .Names = "V", class = "data.frame", row.names = c(NA, 
-7L))
我想要的是删除第一部分,直到下划线,并保留其余部分。所以输出应该是

361,363,392
202,360
.
.
.
我想把它们列出来,我试过了

mylist <- lapply(str_extract_all(df$V, "(?<=[A-Z])\\d+"), as.numeric)

mylist下面使用
stringr
操作字符串和
dplyr
管道命令:

library(stringr)
library(dplyr)

mylist <- str_split(df$V, pattern = ",") %>% # Split the column in a list of vectors
    lapply(function(x) str_replace_all(x, "^(.*?)_", "") %>% # Removes anything before underscore
               str_trim("left") %>% # Removes the empty space before the number
               paste(collapse = ",")) # Collapses all the elements into a single vector
库(stringr)
图书馆(dplyr)
mylist%#在向量列表中拆分列
lappy(函数(x)str_replace_all(x,“^(.*?)”,”)%>%#删除下划线之前的任何内容
str_trim(“left”)%>%#删除数字前的空白
粘贴(collapse=“,”)#将所有元素折叠为一个向量
选项1=强制进入单个元素的列表:

opt1 <- as.numeric(unlist(str_extract_all(df$V, "\\b[0-9]\\d+\\b")))

print(opt1)
#[1] 361 363 392 202 360  55  56  57  58  59  59  60  60  61  26  27  28  29  31  63  64
#[22]  65  66  66  67 100  35  71 154 179  23  24  25  26  27  27  60  26  27  57  59  60
#[43]  61  62  63 100 133 168 197 198 202 203 266 342 354 355 368 370 468 469 484 494 502
#[64] 601 622

opt1比我的好多了@Brandon S请解释一下你做了什么,这样我就能理解了,它也给了我一个带有字符的数据框,而我在我的问题中很清楚,我想要列表,也看看我的尝试,我想要元素是numeric@nik我刚刚编辑了答案,为您提供了两个带有数值的列表选项。对于
“\\b[0-9]\\d+\\b”
,这将查找文本中仅包含数值的所有块。对于您的示例来说,
\\d+
部分实际上是多余的,因为它要求所有实例都以一个数值结尾(它们无论如何都必须以数值结尾,因为我们只查找带有
[0-9]
部分的数值块)。但是,因为我们只为这种情况保留数值,所以它是不相关的。这里有一个很好的资源:@Brandon S谢谢,我接受你的回答,我不知道为什么人们会反对我的问题!!!!谢谢你的提醒,你能补充一些信息吗?我会很感激的!我已经添加了一些评论,如果你还有任何问题,请告诉我。我比你更感兴趣的是^(.*?),“部分,我喜欢你的答案。虽然人们否决了我的问题,但我试图感谢你的努力和帮助。谢谢没有问题,我认为这是一个有趣的问题。
library(stringr)
opt1 <- as.numeric(unlist(str_extract_all(df$V, "\\b[0-9]\\d+\\b")))

print(opt1)
#[1] 361 363 392 202 360  55  56  57  58  59  59  60  60  61  26  27  28  29  31  63  64
#[22]  65  66  66  67 100  35  71 154 179  23  24  25  26  27  27  60  26  27  57  59  60
#[43]  61  62  63 100 133 168 197 198 202 203 266 342 354 355 368 370 468 469 484 494 502
#[64] 601 622
opt2 <- lapply(str_extract_all(df$V, "\\b[0-9]\\d+\\b"), as.numeric)

print(opt2)
#[[1]]
#[1] 361 363 392
#
#[[2]]
#[1] 202 360
#
#[[3]]
#[1] 55 56 57 58 59 59 60 60 61
#
#[[4]]
#[1]  26  27  28  29  31  63  64  65  66  66  67 100
#
#[[5]]
#[1]  35  71 154 179
#
#[[6]]
#[1] 23 24 25 26 27 27 60
#
#[[7]]
#[1]  26  27  57  59  60  61  62  63 100 133 168 197 198 202 203 266 342 354 355 368 370
#[22] 468 469 484 494 502 601 622