我有点像
t <- tribble(~name, ~salary, ~weight,
"sarah", 90000, 110,
"john", 50000, 150,
"jones", 70000, 160,
)
我希望使用salary
向量将weights
除以1000,并将权重(此处以磅为单位)除以2.2:
weights_ls <- c(1000, 2.2)
如何将特定的列(salary
和weight
)除以weights_ls
向量,并逐行划分?例如,by_row
似乎不允许您指定特定的列。例如,我想要得到:
| name | salary | weight |
|------|--------|--------|
| "sarah" | 90 | 50 |
| "john" | 50 | 68.1818 |
| "jones" | 70 | 72.7272 |
对于答案是创建新列还是覆盖现有列,我并不感到困惑。
答案 0 :(得分:0)
您需要转位小节,再次分割并转置
dt[2:3] <- t(t(dt[2:3])/weights_ls)
# name salary weight
# <chr> <dbl> <dbl>
#1 sarah 90 50.0
#2 john 50 68.2
#3 jones 70 72.7
如果您不知道列的位置,也可以使用列名
dt[c('salary', 'weight')] <- t(t(dt[c('salary', 'weight')])/weights_ls)
或使用mapply
dt[2:3] <- mapply(`/`, dt[2:3], weights_ls)
或者按照@markus的建议,将weights_ls
转换为列出并划分。
dt[2:3] <- dt[2:3]/as.list(weights_ls)
将dt
重命名为t
是函数名。
答案 1 :(得分:0)
一种选择是复制“ weights_ls”以使长度相同然后分开
t[-1] <- t[-1]/weights_ls[col(t[-1])]
t
# A tibble: 3 x 3
# name salary weight
# <chr> <dbl> <dbl>
#1 sarah 90 50.0
#2 john 50 68.2
#3 jones 70 72.7