当我尝试手动更改某些值时,我遇到了一个问题
这是我的数据集
.on('connection', ...)
您可以看到第3行和第4行的类别为1.条件是第3行和第4行具有可在上一行(第2行)中找到的值,并且它们将继续到下一行(第5行)。如果是这样,它们实际上属于第2类而不是第1类(是的,我知道它很奇怪,但这是将它们视为相同的要求)。
我有多个ID。我想只识别这种数据子集,以达到预期的效果。
我已经尝试了使用类别的滞后值来创建一个标识符,从而在类别中每次减少数量。让我们忽略首先从类别中增加数量的情况。
预期输出为:
dat <- read.table(text='
id Item Category Next_Category
1 "CRANBERRY 10PKTS CARTON, BLUEBERRY 20PKTS CARTON" 2 2
1 "CRANBERRY 10PKTS CARTON, BLUEBERRY 20PKTS CARTON" 2 1
1 "CRANBERRY 10PKTS CARTON" 1 1
1 "CRANBERRY 10PKTS CARTON" 1 2
1 "CRANBERRY 10PKTS CARTON, BLUEBERRY 20PKTS CARTON" 2 NA
', header=TRUE)
非常感谢提前!
答案 0 :(得分:3)
我们创建一个序列列('i1'),通过n = [0;0;-1];
d = Inf;
im = imread('cameraman.tif');
theta = 60*pi/180;
R = [ 1 0 0 ;
0 cos(theta) -sin(theta);
0 sin(theta) cos(theta)];
t = [0;0;0];
K=[300 0 0;
0 300 0;
0 0 1];
H=K*R/K-1/d*K*t*n'*K;
tform = maketform('projective',H');
imT = imtransform(im,tform);
imshow(imT)
使用', '
将'Item'列拆分为'long'来重新整形'long'格式,获取'的第一个元素'类别','Next_Category',同时将'Item'与cSplit
折叠,最后将'i1'指定为NULL
paste
我们也可以使用与dt1[, i1 := seq_len(.N)]
library(splitstackshape)
cSplit(dt1, "Item", ", ", "long")[,
Category := Category[1L], .(id, Item)
][, c(list(Item = paste(Item, collapse=", ")),
Category = Category[1L], Next_Category = Next_Category[1L]),.(id, i1)
][, i1 := NULL][]
# id Item Category Next_Category
#1: 1 CRANBERRY 10PKTS CARTON, BLUEBERRY 20PKTS CARTON 2 2
#2: 1 CRANBERRY 10PKTS CARTON, BLUEBERRY 20PKTS CARTON 2 1
#3: 1 CRANBERRY 10PKTS CARTON 2 1
#4: 1 CRANBERRY 10PKTS CARTON 2 2
#5: 1 CRANBERRY 10PKTS CARTON, BLUEBERRY 20PKTS CARTON 2 NA
tidyverse
library(tidyverse)
rownames_to_column(dat, "i1") %>%
separate_rows(Item, sep= ", ") %>%
group_by(i1, id) %>%
mutate(Item = paste(Item, collapse=", ")) %>%
group_by(Item, add=TRUE) %>%
summarise_at(vars(Category, Next_Category), first) %>%
ungroup() %>%
select(-i1)
# A tibble: 5 × 4
# id Item Category Next_Category
# <int> <chr> <int> <int>
#1 1 CRANBERRY 10PKTS CARTON, BLUEBERRY 20PKTS CARTON 2 2
#2 1 CRANBERRY 10PKTS CARTON, BLUEBERRY 20PKTS CARTON 2 1
#3 1 CRANBERRY 10PKTS CARTON 1 1
#4 1 CRANBERRY 10PKTS CARTON 1 2
#5 1 CRANBERRY 10PKTS CARTON, BLUEBERRY 20PKTS CARTON 2 NA