使用列表按特定列划分多个列

  • 本文关键字:划分 列表 r
  • 更新时间 :
  • 英文 :


我基本上已经解决了这个问题,但是我想再加一个我想不出来的问题。我想将列表中包含的所有列乘以权重列,类似于下面的示例:

#df 1
Id = c("1", "2", "3", "4")
Persons = c(300, 400, 200, 5000)
Houses = c(20, 40, 10, 23)
Ages =  c(45, 34, 50, 44)
Races = c(1, 3, 1, 2)
weight = c(0.9, 1.2, 0.8, 1.1)
estimates = data.frame(Id, Persons, Houses, Ages, Races, weight)
list <- as.list(colnames(subset(estimates, select = -c(Id, weight))))
estimates <- estimates %>% mutate_each(funs(.*weight), . %in% list)

但是我一直得到以下错误:

as_indices_impl(): !必须子集列具有有效的下标向量。1下标类型logical错误。它必须。是数字或字符。

使用现代across()代替已弃用的mutate_each():

estimates %>% mutate(across(all_of(unlist(list)), (x) x * weight))

或以R为底:

estimates[unlist(list)] <- estimates[unlist(list)] * estimate$weight

当然,如果你简化你的定义,保持它是一个字符向量,那么你可以使用cols而不是unlist(list)

cols = setdiff(names(estimtes), c("Id", "weight"))

或者,对于across(),您可以完全跳过list定义:

estimates %>% mutate(across(!c(Id, weight), (x) x * weight))

最新更新