在特定列的行之间应用函数

时间:2019-06-05 07:21:05

标签: r tibble

我有点像

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)

如何将特定的列(salaryweight)除以weights_ls向量,并逐行划分?例如,by_row似乎不允许您指定特定的列。例如,我想要得到:

| name | salary | weight |
|------|--------|--------|
| "sarah" | 90 | 50 |
| "john" | 50 | 68.1818 |
| "jones" | 70 | 72.7272 |

对于答案是创建新列还是覆盖现有列,我并不感到困惑。

2 个答案:

答案 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