创建使用的函数时strsplit,矢量输入的行为不符合要求,sapply需要使用.这是由于产生的列表输出strsplit.有没有办法对流程进行矢量化 - 也就是说,函数会在列表中为输入的每个元素生成正确的元素?
例如,要计算字符向量中单词的长度:
words <- c("a","quick","brown","fox")
> length(strsplit(words,""))
[1] 4 # The number of words (length of the list)
> length(strsplit(words,"")[[1]])
[1] 1 # The length of the first word only
> sapply(words,function (x) length(strsplit(x,"")[[1]]))
a quick brown fox
1 5 5 3
# Success, but potentially very slow
Run Code Online (Sandbox Code Playgroud)
理想情况下,像length(strsplit(words,"")[[.]])where 这样的东西.被解释为输入向量的相关部分.
我试图在"."上分割一个字符串.并使用"."之前和之后的两个字符串创建其他列.
tes<-c("1.abc","2.di","3.lik")
dat<-c(5,3,2)
h<-data.frame(tes,dat)
h$num<-substr(h$tes,1,1)
h$prim<-unlist(strsplit(as.character(h$tes),"\\."))[2]
h$prim<-sapply(h$tes,unlist(strsplit(as.character(h$tes),"\\."))[2])
Run Code Online (Sandbox Code Playgroud)
我想h$prim包含"abc","di","lik"..但是我无法弄明白.我猜strsplit不是矢量化,但后来我认为该sapply版本应该有效.但是我认为应该很容易:-)
问候,// M
我试图strsplit()在R中使用基于逗号将字符串分解成碎片,但我不想在括号中拆分任何东西.我认为答案是正则表达式,但我正在努力使代码正确.
例如:
x <- "This is it, isn't it (well, yes)"
> strsplit(x, ", ")
[[1]]
[1] "This is it" "isn't it (well" "yes)"
Run Code Online (Sandbox Code Playgroud)
当我想要的是:
[1] "This is it" "isn't it (well, yes)"
Run Code Online (Sandbox Code Playgroud) 注释对我的回答这个问题,这应该使用得到期望的结果strsplit没有,即使它似乎在一个字符向量正确匹配的第一个和最后逗号.这可以使用gregexpr和证明regmatches.
那么为什么strsplit在这个例子中对每个逗号进行拆分,即使regmatches只返回同一个正则表达式的两个匹配?
# We would like to split on the first comma and
# the last comma (positions 4 and 13 in this string)
x <- "123,34,56,78,90"
# Splits on every comma. Must be wrong.
strsplit( x , '^\\w+\\K,|,(?=\\w+$)' , perl = TRUE )[[1]]
#[1] "123" "34" "56" "78" "90"
# Ok. Let's check the positions of matches for this regex …Run Code Online (Sandbox Code Playgroud) 我在变量中有一个字符串,我们称之为v1.该字符串表示图片编号,采用"Pic 27 + 28"的形式.我想提取第一个数字并将其存储在一个名为item的新变量中.
我尝试过的一些代码是:
item <- unique(na.omit(as.numeric(unlist(strsplit(unlist(v1),"[^0-9]+")))))
Run Code Online (Sandbox Code Playgroud)
这很好,直到我找到了一个列表:
[1,] "Pic 26 + 25"
[2,] "Pic 27 + 28"
[3,] "Pic 28 + 27"
[4,] "Pic 29 + 30"
[5,] "Pic 30 + 29"
[6,] "Pic 31 + 32"
Run Code Online (Sandbox Code Playgroud)
在这一点上,我获得了比我想要的更多的数字,因为它也抓住了其他唯一的数字(25).
我实际上尝试过使用gsub,但没有任何工作.帮助将非常感激!
我有:
"word1.word2"
Run Code Online (Sandbox Code Playgroud)
而且我要:
"word1" "word2"
Run Code Online (Sandbox Code Playgroud)
我知道我必须使用strsplitperl = TRUE,但我找不到一段时间的正则表达式(以反馈split参数).
我有这样的情况:
foo <- data.frame("vars" = c("animal: mouse | wks: 12 | site: cage | PI: 78",
"animal: dog | wks: 32 | GI: 0.2",
"animal: cat | wks: 8 | site: wild | PI: 13"))
Run Code Online (Sandbox Code Playgroud)
其中变量名称和相关数据存储在字符串中,如上例所示。特别是,每个variable_name/its_data单元都由|. 之后:是相关数据。
我想要一个像这样的最终数据框:
animal wks site PI GI
mouse 12 cage 78 NA
dog 32 <NA> NA 0.2
cat 8 wild 13 NA
Run Code Online (Sandbox Code Playgroud) 我一直试图在R中用双引号拆分空格分隔的字符串一段时间但没有成功.字符串的示例如下:
降雨量降雪"通道存储""小溪存储"
这对我们很重要,因为这些列标题必须与后续数据相匹配.关于如何解决这个问题,本网站还有其他建议,但它们似乎与R不兼容.一个例子:
正则表达式,用于在未被单引号或双引号括起时使用空格分割字符串
这是我一直在尝试的一些代码:
str <- 'rainfall snowfall "Channel storage" "Rivulet storage"'
regex <- "[^\\s\"']+|\"([^\"]*)\""
split <- strsplit(str, regex, perl=T)
Run Code Online (Sandbox Code Playgroud)
我想要的是什么
[1] "rainfall" "snowfall" "Channel storage" "Rivulet storage"
Run Code Online (Sandbox Code Playgroud)
但我得到的是:
[1] "" " " " " " "
Run Code Online (Sandbox Code Playgroud)
向量是正确的长度(这是令人鼓舞的)但当然字符串是空的或包含单个空格.有什么建议?
提前致谢!
我需要处理一些主要是csv的数据.问题是如果它出现在行的末尾(例如,下面示例中的3之后的那个),则R忽略逗号.
> strsplit("1,2,3,", ",")
[[1]]
[1] "1" "2" "3"
Run Code Online (Sandbox Code Playgroud)
[1] "1" "2" "3" NA相反,我希望将其读入.我怎样才能做到这一点?谢谢.
我有一个包含一个字符串列的数据表.我想使用strsplit创建另一列作为此列的子集.
dat <- data.table(labels=c('a_1','b_2','c_3','d_4'))
Run Code Online (Sandbox Code Playgroud)
我想要的输出是
label sub_label
a_1 a
b_2 b
c_3 c
d_4 d
Run Code Online (Sandbox Code Playgroud)
我尝试过以下但似乎都没有效果.
dat %>%
mutate(
sub_labels=strsplit(as.character(labels), "_")[[1]][1]
)
# gives a column whose values are all "a"
Run Code Online (Sandbox Code Playgroud)
这个对我来说合乎逻辑,
dat %>%
mutate(
sub_labels=sapply(strsplit(as.character(labels), "_"), function(x) x[[1]][1])
)
Run Code Online (Sandbox Code Playgroud)
给出错误
错误:不知道如何处理类型的pairlist
我看到另一个文章,其中strsplit的输出上的粘贴崩溃工作,所以我不明白为什么匿名函数中的子集正在给出问题.感谢您对此的任何澄清.