针对特定列跨行应用函数
apply function across rows for specific columns
我有这样的小问题:
t <- tribble(~name, ~salary, ~weight,
"sarah", 90000, 110,
"john", 50000, 150,
"jones", 70000, 160,
)
我希望使用 weights
向量将 salary
除以 1000,并将重量(此处以磅为单位)除以 2.2:
weights_ls <- c(1000, 2.2)
如何逐行除以 weights_ls
向量的特定列(salary
和 weight
)? by_row
,例如,似乎不允许您指定特定的列。例如,我想得到:
| name | salary | weight |
|------|--------|--------|
| "sarah" | 90 | 50 |
| "john" | 50 | 68.1818 |
| "jones" | 70 | 72.7272 |
我不关心答案是创建新列还是覆盖现有列。
您需要移调小标题,再分割并移调
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
是函数名称。
一种选择是复制 '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
我有这样的小问题:
t <- tribble(~name, ~salary, ~weight,
"sarah", 90000, 110,
"john", 50000, 150,
"jones", 70000, 160,
)
我希望使用 weights
向量将 salary
除以 1000,并将重量(此处以磅为单位)除以 2.2:
weights_ls <- c(1000, 2.2)
如何逐行除以 weights_ls
向量的特定列(salary
和 weight
)? by_row
,例如,似乎不允许您指定特定的列。例如,我想得到:
| name | salary | weight |
|------|--------|--------|
| "sarah" | 90 | 50 |
| "john" | 50 | 68.1818 |
| "jones" | 70 | 72.7272 |
我不关心答案是创建新列还是覆盖现有列。
您需要移调小标题,再分割并移调
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
是函数名称。
一种选择是复制 '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