我有凌乱的数据。我想根据列中的短语对数据进行子集化直到最后。
df1 <- data.frame(
V1=c("No. de Control Interno de", "la Partida / Concepto de Obra","",
"LO-009J0U004-","E50-2021",""),
V2=c("","Descripción Breve","Trabajos de señalamiento horizontal en puente de",
"cuota \"El Zacatal\", consistentes en suministro y","aplicación de pintura de tránsito, suministro y",
"colocación de botones y ménsulas reflejantes."),
V3=c("","ClaveCUCOP","","","62502002",""),
V4=c("Unidad","Observaciones de Medida","","","Obra",""),
V5=c("","Cantidad","","","1","")
)
Run Code Online (Sandbox Code Playgroud)
无论何时V2,都有短语Descripción,代码应该从该行到最后对数据帧进行子集化。例如,在上面的例子中,这意味着从第 2 行到第 6 行选择数据。我正在尝试使用str_detectfrom stringrpackage。
我正在尝试使用 删除列名称的前 4 个字符stringr。我知道如何指定我想要保留的字符,但由于每列长度不同,我需要指定我不想保留的字符,但我不知道该怎么做。
我怎样才能做到这一点?
我正在尝试从列中删除 $ 符号和 , ,到目前为止一直通过使用 gsub 来做到这一点,但我想知道是否有一种方法可以在管道内使用 stringr 来做到这一点。
示例代码:
DataFrame <- structure(list(Date = structure(c(18485, 18459, 18471, 18459,
18459, 18459, 18499, 18513, 18513, 18513), class = "Date"), Payment = c("$10,000.00",
"$2,000.00", "$500.00", "$500.00", "$5,000.00", "$4,000.00",
"$5,000.00", "$500.00", "$20,000.00", "$3,290.00")), row.names = c(NA,
-10L), class = c("tbl_df", "tbl", "data.frame"))
Run Code Online (Sandbox Code Playgroud)
当前使用 gsub 的方法:
DataFrame$Payment <-gsub("\\$","",DataFrame$Payment)
DataFrame$Payment <-gsub("\\,","",DataFrame$Payment)
DataFrame$Payment <- as.numeric(DataFrame$Payment)
Run Code Online (Sandbox Code Playgroud)
感谢您的指点!
我有一个大型 data.table,包含超过 700 万行和 38 列。其中一列是字符向量,其中包含很长的描述性句子。我知道每个句子的第一个单词是一个类别,第二个单词是一个名称,我需要将这两个单词放入两个新列中以供以后分析。
这可能不能很好地说明时间差异,因为它太小了(实际上system.time()在这个例子中给出了 0),但这里有一个玩具字符串来说明我想要做的事情:
# Load libraries:
library(data.table)
library(stringr)
# Create example character string:
x <- c("spicy apple cream", "mild peach melba", "juicy strawberry tart")
id <- c(1,2,3)
# Create dt:
mydt <- data.table(id = id, desert = x)
Run Code Online (Sandbox Code Playgroud)
假设在我的真实数据中,我想从每个字符串中提取第一个单词,并将其放入一个名为“category”的新变量中,然后从每个字符串中提取第二个单词并将其放入一个名为“fruit_name”的新变量中。
词法上最简单的方法似乎是使用stringr::word()which 很有吸引力,因为它避免了计算复杂的正则表达式的需要:
# Add a new category column:
mydt[, category := stringr::word(desert, 1)]
# Add a new fruit name column:
mydt[, fruit_name := stringr::word(desert, 2)]
Run Code Online (Sandbox Code Playgroud)
虽然这在小数据集上工作得很好,但在我的真实数据集上却花了很长时间(我怀疑它挂起了,尽管我杀死了它并在 10 分钟后重新启动了 R)。就上下文而言,该数据集中的其他字符向量类型操作大约需要 20 秒才能运行,因此该函数似乎特别耗费人力和计算资源。
相反,如果我使用正则表达式, …
我知道这可能是一个愚蠢的问题,但我很好奇是否有任何区别,我更喜欢使用 str_detect 因为语法在我的大脑中更有意义。
我想将此字符串拆分为几个子字符串:
BAA33520.2 |/gene ="vpf402",/ product ="Vpf402"| GI:8272373 | AB012574 | join {7347:7965,0:591}
分隔符是| (ascii 124).
它适用于所有其他分隔符,但不适用于此分隔符.
我想从向量中提取第一个字符串.例如,
y<- c('london/hilss', 'newyork/hills', 'paris/jjk')
Run Code Online (Sandbox Code Playgroud)
我想在符号"/"之前得到字符串,即
location
london
newyork
paris
Run Code Online (Sandbox Code Playgroud) 我想用&in\&替换R&D。
我该怎么做?
stringr::str_replace("R&D","&","\\&")仍然给出R&D而不是R\&D,我不知道为什么。
r ×8
stringr ×8
dplyr ×2
string ×2
data.table ×1
performance ×1
regex ×1
replace ×1
tidyselect ×1