【发布时间】:2019-02-19 16:24:11
【问题描述】:
我正在编写一个闪亮的应用程序,它将模拟谷歌表单中的数据写入谷歌表格。我想创建一个函数,该函数使用字符串修改来根据用户输入插入唯一 ID。此函数将在下载文件时在本地调用,可重复性非常重要..所以我认为它应该依赖于输入,而不是像“ids”包中那样随机生成...
这里是函数的示例代码:
#Unique_id produces a 9 digit code by calling phone number, timestamp, and two letters - first and last name
unique_id <- function(f, l, y, z){
##where f is the column of FIRST NAME
f %>% str_replace(" ", "") %>% toupper() %>% str_sub(1, 2)
##where l is LAST NAME
l %>% str_replace(" ", "") %>% toupper() %>% str_sub(1, 2)
##Where y is TIMESTAMP
y %>% paste0() %>% str_extract("[:digit:][:digit:]-[:digit:][:digit:]") %>% str_replace_all("-", "")
##Where z is phone number formatted NNN-NNN-NNNN
z %>% str_extract("-[:digit:][:digit:][:digit:]-") %>% str_replace_all("-", "")
##Where UID is the UserID generated...
UID <- c(f, l , y, z)
UID <- str_replace("-", "")
return(UID)
}
我怀疑最后一个块是错误的......但它可能都是错误的,我真的只是在开玩笑。
这是我想调用它的数据框中可能包含的信息示例...
Phone Address FirstName LastName Timestamp
1 951-349-8967 2134 Road Road John jerrod 2018-09-14 20:09:38
2 342-651-3752 154 House St. Dora angela 2018-09-14 20:09:38
在第 1 行调用此函数的理想结果是 UID 为 JJ0914349。然后我会将它插入一个新列,即“UID”字段。
现在,我明白了
Error: Empty `pattern` not supported
感谢任何帮助。
【问题讨论】:
-
部分问题在于您没有将
UID传递给str_replace。您还应该使用str_replace_all,这样该行将变为UID <- str_replace_all(UID, "-", "") -
str_replace只会替换第一次出现的有问题的模式,即str_replace('111-111-1111', '-', '')返回111111-1111。我假设您想替换所有破折号,因此str_replace_all -
感谢您的关注;我以为我替换了那些实例。现在,当我调用函数
unique_id时,我得到一个不同数字输出的向量。它仍然不是我希望的字符串。也许我需要使用不同的函数来代替串联? -
您还需要将每个片段的输出分配回对象
f、y,、l、z,所以对于f:f <- f %>% str_replace_all(" ", "") %>% toupper() %>% str_sub(1, 2)。对所有四个都这样做,然后再试一次。
标签: r replace split stringr unique-key