将数据列添加到基于列表dplyr设置为初始值的数据框中

时间:2019-03-21 21:01:44

标签: r dplyr

如果我有一个向量,我们称之为x:

x <- c('a', 'b', 'c', 'd', 'e')

我想说我也有一个数据帧df,这是一种为向量中的每个值创建列并将其初始化为某个值(例如0)的dplyr方法。我知道在R中这很简单,因为我可以执行以下操作:

df[,x] <- 0

但是我对dplyr方式感到好奇。 谢谢!

1 个答案:

答案 0 :(得分:1)

[<-函数可用于dplyr类型的调用,尽管我认为它并不优雅。我分配给1而不是0。

features <- 
structure(list(f1 = structure(1:2, .Label = c("blue", "geeen"
), class = "factor"), f2 = c(0, 0), a = c(0, 0)), row.names = c(NA, 
-2L), class = "data.frame")

features %>% `[<-`(TRUE, c("a","b","c"), 1)
     f1 f2 a b c
1  blue  0 1 1 1
2 geeen  0 1 1 1

我确实发现,使用dplyr编码对因子列的数字赋值处理有些不同。基本的[<-赋值将强制转换为数字,而将“%>%”与“ [<-” witll的组合使用将导致因子类的:

str( features %>% `[<-`(TRUE, "f1", 0) )
#--------------
'data.frame':   2 obs. of  3 variables:
 $ f1: Factor w/ 2 levels "blue","geeen": NA NA
 $ f2: num  0 0
 $ a : num  0 0
Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = c(0, 0)) :
  invalid factor level, NA generated