首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将多个变量复制到列

如何将多个变量复制到列
EN

Stack Overflow用户
提问于 2019-06-25 06:43:24
回答 1查看 36关注 0票数 0

我想将几个变量复制到列中。我目前有这样的数据。

代码语言:javascript
复制
   date      bundle_name  totbund   prod1  totprod1  prod2  totprod2  
06/01/2019      a_bund       1        a       1        b       1
06/01/2019        a          1
06/01/2019        b          2
07/01/2019      b_bund       1        b       2
07/01/2019      b_bund       2        b       4
07/01/2019        b          2

就像这样

代码语言:javascript
复制
   date      bundle_name  totbund   prod1  totprod1  prod2  totprod2  
06/01/2019      a_bund       1        a       1        b       1
06/01/2019        a          1        a       1
06/01/2019        b          2        b       2
07/01/2019      b_bund       1        b       2
07/01/2019      b_bund       2        b       4
07/01/2019        b          2        b       2

因此,如果该行的prod1和totprod1列为空,我会将bundle_name中的数据复制到prod1,并将totbund中的数据复制到totprod1。有没有办法做到这一点?提前感谢这么多

EN

回答 1

Stack Overflow用户

发布于 2019-06-25 07:16:05

直接使用ifelse

代码语言:javascript
复制
x$prod1 <- ifelse(is.na(x$prod1) | !nzchar(x$prod1), x$bundle_name, x$prod1)
x$totprod1 <- ifelse(is.na(x$totprod1) | !nzchar(x$totprod1), x$totbund, x$totprod1)

x
#         date bundle_name totbund prod1 totprod1 prod2 totprod2
# 1 06/01/2019      a_bund       1     a        1     b        1
# 2 06/01/2019           a       1     a        1             NA
# 3 06/01/2019           b       2     b        2             NA
# 4 07/01/2019      b_bund       1     b        2             NA
# 5 07/01/2019      b_bund       2     b        4             NA
# 6 07/01/2019           b       2     b        2             NA

既然你提到了管道(不确定你指的是什么):

dplyr

代码语言:javascript
复制
library(dplyr)
x %>%
  mutate(
    prod1 = if_else(is.na(prod1) | !nzchar(prod1), bundle_name, prod1),
    totprod1 = if_else(is.na(totprod1) | !nzchar(totprod1), totbund, totprod1)
  )
#         date bundle_name totbund prod1 totprod1 prod2 totprod2
# 1 06/01/2019      a_bund       1     a        1     b        1
# 2 06/01/2019           a       1     a        1             NA
# 3 06/01/2019           b       2     b        2             NA
# 4 07/01/2019      b_bund       1     b        2             NA
# 5 07/01/2019      b_bund       2     b        4             NA
# 6 07/01/2019           b       2     b        2             NA

data.table

代码语言:javascript
复制
library(data.table)
library(magrittr)
xDT <- x
setDT(xDT)
xDT %>%
  .[, totprod1 := ifelse(is.na(totprod1) | !nzchar(totprod1), totbund, totprod1) ] %>%
  .[, prod1    := ifelse(is.na(prod1) | !nzchar(prod1), bundle_name, prod1) ] %>%
  .[]
#          date bundle_name totbund prod1 totprod1 prod2 totprod2
# 1: 06/01/2019      a_bund       1     a        1     b        1
# 2: 06/01/2019           a       1     a        1             NA
# 3: 06/01/2019           b       2     b        2             NA
# 4: 07/01/2019      b_bund       1     b        2             NA
# 5: 07/01/2019      b_bund       2     b        4             NA
# 6: 07/01/2019           b       2     b        2             NA

(后面的%>% .[]只是让它在控制台上打印,这在生产中是不必要的。)

样本数据。我添加了空字符串"",试图模仿你的问题中的内容,但我不确定它看起来是这样的,因为你实际上有空字符串(所有的数字都是真正的字符串),或者你只是手动键入它,让它看起来更好。NA是由R推断的,因为第一行数据中有数字,而空字符串在那里没有意义。

代码语言:javascript
复制
x <- read.table(header = TRUE, stringsAsFactors = FALSE, text='
   date      bundle_name  totbund   prod1  totprod1  prod2  totprod2  
06/01/2019      a_bund       1        a       1        b       1
06/01/2019        a          1       ""      ""       ""      ""
06/01/2019        b          2       ""      ""       ""      ""
07/01/2019      b_bund       1        b       2       ""      ""
07/01/2019      b_bund       2        b       4       ""      ""
07/01/2019        b          2       ""      ""       ""      ""')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56744818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档