R 从特定单元格中删除值并相应调整行中的值

R 从特定单元格中删除值并相应调整行中的值,r,R,我想从包含该值的所有单元格中删除一个特定值,即示例中的“cap”,并将该行中的下一个值移动到该值“cap”首次出现的单元格中。这也会分别更改“OrderNumber”列中的值 这将有助于生成示例: custID <- data.frame(c(1,2,3,4,5)) OrderNumber_1 <- data.frame(c(1,1,1,1,1)) OrderNumber_2 <- data.frame(c(2, NA , 2,2,2)) OrderNumber_3 <-

我想从包含该值的所有单元格中删除一个特定值,即示例中的“cap”,并将该行中的下一个值移动到该值“cap”首次出现的单元格中。这也会分别更改“OrderNumber”列中的值

这将有助于生成示例:

custID <- data.frame(c(1,2,3,4,5))
OrderNumber_1 <- data.frame(c(1,1,1,1,1))
OrderNumber_2 <- data.frame(c(2, NA , 2,2,2))
OrderNumber_3 <- data.frame(c(3, NA, 3, 3, NA))
OrderNumber_4 <- data.frame(c(4, NA, 4, 4, NA))
OrderNumber_5 <- data.frame(c(5, NA, 5, 5, NA))
OrderType_1 <- data.frame(c("ball", "pen", "ball", "shuttle", "pen"))
OrderType_2 <- data.frame(c("pen", NA, "cap", "cap", "pen"))
OrderType_3 <- data.frame(c("cap", NA, "cap", "cap", NA))
OrderType_4 <- data.frame(c("shuttle", NA, "ball", "cap", NA))
OrderType_5 <- data.frame(c("pen", NA, "cap", "ball", NA))

report <- cbind(custID, OrderNumber_1, OrderNumber_2, OrderNumber_3, OrderNumber_4, OrderNumber_5, OrderType_1, OrderType_2, OrderType_3, OrderType_4, OrderType_5 )

report <-as.data.frame(report)

custID这里有一个带有
apply的选项

report[7:ncol(report)] <-  t(apply(report[7:ncol(report)], 1, function(x) {
               i1 <- x == 'cap'
              c(x[!i1], rep(NA, sum(i1, na.rm = TRUE)))}))
report
#  V1 V2 V3 V4 V5 V6      V7   V8      V9  V10  V11
#1  1  1  2  3  4  5    ball  pen shuttle  pen <NA>
#2  2  1 NA NA NA NA     pen <NA>    <NA> <NA> <NA>
#3  3  1  2  3  4  5    ball ball    <NA> <NA> <NA>
#4  4  1  2  3  4  5 shuttle ball    <NA> <NA> <NA>
#5  5  1  2 NA NA NA     pen  pen    <NA> <NA> <NA>

report[7:ncol(report)]如果数据框右侧有更多列,是否可以使用相同的代码?我肯定会更改列的范围。只需更改索引
7:ncol(report)
。在这里,我从第7列到最后指定。如果你需要说从4号改为4:ncol(报告)。或者选择4到6 8到10
c(4:6,8:10)
这样做效果非常好。非常感谢。此外,如果右侧有包含时间值的列,如您昨天帮助的示例,我如何更改与“cap”对应的值。就像我们在上面的示例中更改了OrderNumber列中的值一样?假设每个订单号/订单类型都有包含“时间值”的列。我想删除“Cap”的时间值,并将其替换为其他订单类型的下一个或后续时间值。我会把这个问题贴在我以前的帖子上。让我看看你以前的帖子
report[7:ncol(report)] <-  t(apply(report[7:ncol(report)], 1, function(x) {
               i1 <- x == 'cap'
              c(x[!i1], rep(NA, sum(i1, na.rm = TRUE)))}))
report
#  V1 V2 V3 V4 V5 V6      V7   V8      V9  V10  V11
#1  1  1  2  3  4  5    ball  pen shuttle  pen <NA>
#2  2  1 NA NA NA NA     pen <NA>    <NA> <NA> <NA>
#3  3  1  2  3  4  5    ball ball    <NA> <NA> <NA>
#4  4  1  2  3  4  5 shuttle ball    <NA> <NA> <NA>
#5  5  1  2 NA NA NA     pen  pen    <NA> <NA> <NA>
report_output
#  V1 V2 V3 V4 V5 V6      V7   V8      V9  V10 V11
#1  1  1  2  3  4 NA    ball  pen shuttle  pen  NA
#2  2  1 NA NA NA NA     pen <NA>    <NA> <NA>  NA
#3  3  1  2 NA NA NA    ball ball    <NA> <NA>  NA
#4  4  1  2 NA NA NA shuttle ball    <NA> <NA>  NA
#5  5  1  2 NA NA NA     pen  pen    <NA> <NA>  NA
names(report) <- paste0('V', seq_along(report))
names(report_output) <- paste0('V', seq_along(report_output))