gpt4 book ai didi

r - 提取r中数据框中每个字符串的第一部分

转载 作者:行者123 更新时间:2023-12-04 12:11:14 26 4
gpt4 key购买 nike

我有一个数据框 M。我想提取由 ":" 分隔的每个字符串的第一部分。我使用了 strsplit 但结果是一个大字符而不是数据框。有人可以帮忙吗?

M <- read.table(text=
"1/1:205,54,0:18:0:57 1/1:141,39,0:13:0:42 0/0:0,54,255:18:0:45 1/1:174,48,0:16:0:51 0/0:0,84,255:28:0:75
0/0:0,78,255:26:0:99 0/0:0,63,255:21:0:86 0/0:0,45,255:15:0:68 0/0:0,48,255:16:0:71 0/0:0,132,255:44:0:99
0/0:0,78,255:26:0:89 0/0:0,78,255:26:0:89 0/0:0,36,255:12:0:47 0/0:0,33,255:11:0:44 0/0:0,108,255:36:0:99
0/0:0,75,255:25:0:99 0/0:0,54,255:18:0:78 0/0:0,69,255:23:0:93 0/0:0,33,255:11:0:57 0/0:0,96,255:32:0:99
0/0:0,60,75:21:0:74 0/0:0,51,84:17:0:65 0/0:0,48,64:17:0:62 0/0:0,42,65:15:0:56 0/0:0,84,99:28:0:98 ",
head=F, stringsAsFactors=F)
S <- sapply(strsplit(M, ":"), "[", 1)

最佳答案

使用 strsplit 可能不是最好的选择,因为我们只对子字符串感兴趣。假设 OP 有兴趣了解如何将 strsplit 用于此示例数据集,则对 OP 代码的修改将是使用嵌套的 lapply/sapply 循环。

 M[] <- lapply(M, function(x) sapply(strsplit(as.character(x), ':'),'[',1))
M
# V1 V2 V3 V4 V5
#1 1/1 1/1 0/0 1/1 0/0
#2 0/0 0/0 0/0 0/0 0/0
#3 0/0 0/0 0/0 0/0 0/0
#4 0/0 0/0 0/0 0/0 0/0
#5 0/0 0/0 0/0 0/0 0/0

或者由于列都是相似的,我们可以unlist,使用strsplit并将输出分配给原始数据集,这样我们就可以保持原始结构完整我们得到的输出。

  M[] <- sapply(strsplit(unlist(M), ':'),'[',1)

或者更快的选择是使用 stringi 中的 stri_extract_first 来提取不是 : 的字符。

  library(stringi)
M[] <- stri_extract_first(unlist(M), regex='[^:]+')

关于r - 提取r中数据框中每个字符串的第一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31660057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com