species <- c("Dacut","Hhyde","Faffi","Dmelan","Jrobusta")
leg <- c(1,2,3,4,5)
df <- data.frame(species, leg)
我正在尝试在数据帧的第一列中每个字符的第一个字母和第二个字母之间添加一个句点(“。”)。
#End Goal:
#D.acut
#H.hyde
#F.affi
#D.melan
#J.robusta
有人知道我可以用于此问题的任何代码吗?
答案 0 :(得分:1)
使用sub
,我们可以在(?<=^.)
后面的零宽查找中找到,然后替换为一个点。这样可以将点插入第二个位置。
df$species <- sub("(?<=^.)", "\\.", df$species, perl=TRUE)
df$species
[1] "D.acut" "H.hyde" "F.affi" "D.melan" "J.robusta"
注意:如果由于某种原因,如果您只希望在物种名称中的第一个字符是实际大写字母的情况下进行此替换,则请改用以下模式:
(?<=^[A-Z])
答案 1 :(得分:1)
使用-- Define a row type (an object).
create or replace type my_row_type as object (
id int,
next_id int
);
-- Define a table type of that row type
create type my_table_type as table of my_row_type;
-- Create a function that returns a table.
create or replace function my_function
return my_table_type
is
result my_table_type;
begin
select
-- Use the rowtype constructor to put the id and next_id into a row object
my_row_type(
t.id,
lead(t.id) over (order by t.id))
-- use bulk collect into to query all rows into the table variable 'result'
bulk collect into
result
from
my_table t;
-- Don't forget to actually return it.
return result;
end;
/
-- Query it by 'casting' the function result to a table.
select
id,
next_id
from
table(my_function);
在以下位置分割字符串:
substr()
第一个species <- c("Dacut","Hhyde","Faffi","Dmelan","Jrobusta")
leg <- c(1,2,3,4,5)
df <- data.frame(species, leg, stringsAsFactors = FALSE)
df$species <- paste0(
substr(df$species, 1, 1),
".",
substr(df$species, 2, nchar(df$species))
)
df$species
提取字符1到1,第二个提取字符2到字符串中的最后一个字符。借助substr()
,我们可以将paste()
放在两者之间。
或带有后向引用的.
:
sub()
df$species <- sub("(^.)", "\\1.", df$species)
是用(^.)
分组的字符串中的第一个字符。 ()
用对组(sub()
)的反向引用加上\\1
来替换第一个实例。