我有一些具有唯一代码的产品数据。我正在尝试根据其他列中的信息重新创建此代码。
我拥有的数据如下:
UPC SY GE VEND ITEM
<chr> <chr> <chr> <chr> <chr>
1 00-01-85674-60002 0 1 85674 60002
2 00-01-85674-60001 0 1 85674 60001
3 00-01-85674-60004 0 1 85674 60004
4 27-01-15502-01124 27 1 15502 1124
5 00-01-80020-00001 0 1 80020 1
6 00-01-80020-24221 0 1 80020 24221
7 00-01-80020-31799 0 1 80020 31799
8 00-01-80020-00004 0 1 80020 4
9 00-01-80020-35333 0 1 80020 35333
10 00-01-80020-00002 0 1 80020 2
我正在尝试从UPC
,SY
,GE
和VEND
列重新创建ITEM
列。
第一个有点简单。
在SY
列的开头添加一个0,在GE
列的另一个0上添加VEND
和ITEM
-然后在每列之间添加破折号。
但是,与第4行类似的行出现了问题。如果按照以前的方法进行操作,我会得到的。
027-001-15502-01124
与其他产品不匹配。
有人可以为我指出正确的方向,以便我如何从其他4列中复制与UPC
列相同的结构吗?
数据:
df <- structure(list(UPC = c("00-01-85674-60002", "00-01-85674-60001",
"00-01-85674-60004", "27-01-15502-01124", "00-01-80020-00001",
"00-01-80020-24221", "00-01-80020-31799", "00-01-80020-00004",
"00-01-80020-35333", "00-01-80020-00002", "00-01-80020-24220",
"00-01-80020-10001", "27-01-15502-01125", "00-01-80020-00005",
"27-02-15504-05184", "00-01-80022-42230", "27-01-15502-01126",
"00-01-80020-00003", "00-01-80020-35332", "06-01-07634-00011",
"06-01-07634-00021", "27-01-00007-10404", "00-02-40850-00000",
"00-01-40850-02001", "00-01-40850-03001", "00-01-40850-06001",
"00-01-40850-00005", "00-01-40850-02005", "00-01-40850-00004",
"00-01-40850-02004", "00-01-40850-00001", "00-01-40850-02002",
"00-01-40850-03002", "00-01-40850-03006", "00-01-40850-02006",
"00-01-40850-00006", "00-01-40850-06010", "00-01-40850-07010",
"00-02-40850-03010", "00-01-40850-00003", "06-01-03675-10295",
"27-01-15503-00343", "27-01-15504-00629", "06-01-03675-10287",
"06-01-03675-10286", "27-01-15503-02068", "06-01-03675-10383",
"06-01-03675-10595", "06-02-03675-10187", "27-01-15503-00708",
"27-01-15504-00630", "06-01-03675-10195", "06-01-03675-10186",
"27-01-15503-03729", "07-01-66895-86000", "27-01-15504-02609",
"00-02-72783-00059", "27-01-15503-03887", "00-03-72783-00050",
"00-02-72783-00009", "00-02-72783-00300", "27-01-15502-01130",
"27-01-15503-01162", "27-01-15504-00631", "00-01-72783-00007",
"27-01-15503-03666", "00-01-72783-00033", "00-01-72783-00400",
"00-01-72783-00004", "00-01-72783-00200", "27-01-15502-01133",
"27-01-15503-01161", "27-01-15504-00633", "00-01-72783-00006",
"00-01-72783-00022", "00-01-72783-12100", "00-01-72783-01000",
"00-01-07278-30010", "00-01-72783-00100", "00-01-72783-00600",
"27-01-15503-00046", "27-01-15504-00632", "00-01-72783-00005",
"00-01-72783-00011", "00-01-72783-00066", "00-01-09125-00016",
"00-01-09125-00005", "27-01-15503-03375", "00-02-09125-00010",
"00-01-09125-00040", "00-01-09125-00146", "00-01-09125-00006",
"27-01-15503-03376", "00-02-09125-00030", "00-01-09125-00076",
"00-01-09125-00070", "00-02-09125-00020", "00-01-09125-00066",
"27-01-15503-03738", "00-01-09125-00007"), SY = c("0", "0", "0",
"27", "0", "0", "0", "0", "0", "0", "0", "0", "27", "0", "27",
"0", "27", "0", "0", "6", "6", "27", "0", "0", "0", "0", "0",
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",
"6", "27", "27", "6", "6", "27", "6", "6", "6", "27", "27", "6",
"6", "27", "7", "27", "0", "27", "0", "0", "0", "27", "27", "27",
"0", "27", "0", "0", "0", "0", "27", "27", "27", "0", "0", "0",
"0", "0", "0", "0", "27", "27", "0", "0", "0", "0", "0", "27",
"0", "0", "0", "0", "27", "0", "0", "0", "0", "0", "27", "0"),
GE = c("1", "1", "1", "1", "1", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "2", "1", "1", "1", "1", "1", "1", "1",
"2", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "2", "1", "1", "1", "1", "1", "1", "1",
"1", "1", "2", "1", "1", "1", "1", "1", "1", "1", "2", "1",
"3", "2", "2", "1", "1", "1", "1", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "1", "1", "2", "1", "1", "1", "1", "2",
"1", "1", "2", "1", "1", "1"), VEND = c("85674", "85674",
"85674", "15502", "80020", "80020", "80020", "80020", "80020",
"80020", "80020", "80020", "15502", "80020", "15504", "80022",
"15502", "80020", "80020", "7634", "7634", "7", "40850",
"40850", "40850", "40850", "40850", "40850", "40850", "40850",
"40850", "40850", "40850", "40850", "40850", "40850", "40850",
"40850", "40850", "40850", "3675", "15503", "15504", "3675",
"3675", "15503", "3675", "3675", "3675", "15503", "15504",
"3675", "3675", "15503", "66895", "15504", "72783", "15503",
"72783", "72783", "72783", "15502", "15503", "15504", "72783",
"15503", "72783", "72783", "72783", "72783", "15502", "15503",
"15504", "72783", "72783", "72783", "72783", "7278", "72783",
"72783", "15503", "15504", "72783", "72783", "72783", "9125",
"9125", "15503", "9125", "9125", "9125", "9125", "15503",
"9125", "9125", "9125", "9125", "9125", "15503", "9125"),
ITEM = c("60002", "60001", "60004", "1124", "1", "24221",
"31799", "4", "35333", "2", "24220", "10001", "1125", "5",
"5184", "42230", "1126", "3", "35332", "11", "21", "10404",
"0", "2001", "3001", "6001", "5", "2005", "4", "2004", "1",
"2002", "3002", "3006", "2006", "6", "6010", "7010", "3010",
"3", "10295", "343", "629", "10287", "10286", "2068", "10383",
"10595", "10187", "708", "630", "10195", "10186", "3729",
"86000", "2609", "59", "3887", "50", "9", "300", "1130",
"1162", "631", "7", "3666", "33", "400", "4", "200", "1133",
"1161", "633", "6", "22", "12100", "1000", "30010", "100",
"600", "46", "632", "5", "11", "66", "16", "5", "3375", "10",
"40", "146", "6", "3376", "30", "76", "70", "20", "66", "3738",
"7")), row.names = c(NA, -100L), class = c("tbl_df", "tbl",
"data.frame"))
答案 0 :(得分:2)
使用stringr
(tidyverse
的一部分)的解决方案。
library(tidyverse)
df2 <- df %>%
mutate(UPC2 = str_c(str_pad(SY, width = 2, pad = "0"),
str_pad(GE, width = 2, pad = "0"),
str_pad(VEND, width = 5, pad = "0"),
str_pad(ITEM, width = 5, pad = "0"), sep = "-"))
df2
# # A tibble: 100 x 6
# UPC SY GE VEND ITEM UPC2
# <chr> <chr> <chr> <chr> <chr> <chr>
# 1 00-01-85674-60002 0 1 85674 60002 00-01-85674-60002
# 2 00-01-85674-60001 0 1 85674 60001 00-01-85674-60001
# 3 00-01-85674-60004 0 1 85674 60004 00-01-85674-60004
# 4 27-01-15502-01124 27 1 15502 1124 27-01-15502-01124
# 5 00-01-80020-00001 0 1 80020 1 00-01-80020-00001
# 6 00-01-80020-24221 0 1 80020 24221 00-01-80020-24221
# 7 00-01-80020-31799 0 1 80020 31799 00-01-80020-31799
# 8 00-01-80020-00004 0 1 80020 4 00-01-80020-00004
# 9 00-01-80020-35333 0 1 80020 35333 00-01-80020-35333
# 10 00-01-80020-00002 0 1 80020 2 00-01-80020-00002
# # ... with 90 more rows
答案 1 :(得分:2)
这是base R
的{{1}}选项。将第一个列以外的列转换为sprintf
,然后将numeric
与指定的sprintf
一起使用,以0开头的填充
fmt