Я пытаюсь написать функцию для преобразования столбцов в R. Я думаю, этот код облегчит объяснение:
a = c(0,0,0,1)
b = c(1,1,1,1)
c = c(0,1,1,0)
d = c(1,1,0,0)
df = data.frame(a,b,c,d)
У меня также есть дополнительный список, который дает значения для каждого столбца: а = 100, б = 100, с = 200, д = 300. Есть еще много столбцов, но, скажем, я создал три списка:
onehundred = c('a', 'b')
twohundred = c('c')
threehundred = c('d')
Я хочу добавить новые столбцы с именами 'a_2', 'b_2', 'c_2' и 'd_2', чтобы каждый элемент в каждом столбце умножается на значение (поэтому a_2 = c (0,0,0,100) и др. c.). Как бы я go об этом? В настоящее время у меня есть:
func = function(column){
df%>%
mutate(!!paste0(column, '_2') := casewhen(
column %in% onehundred ~ 100*column,
column %in% twohundred ~ 200*column,
column %in% threehundred ~ 300*column,
}
c('a', 'b', 'c', 'd')%>%
map(func)
Так что, когда я запускаю функцию, она не работает. Однако, если я заменим 100*column
на
100*"a"
(но a находится внутри отметок, а не в кавычках), код будет работать для этого единственного столбца. Как я могу запустить его для каждого столбца? Примечание 1: Я ожидаю, что эта функция создаст список из 4 кадров данных с 5 столбцами в каждом (a, b, c, d + один мутированный столбец). Я знаю, как свести их в один фрейм данных. Примечание 2: В качестве альтернативы я бы остановился на трех столбцах, обозначенных «сто», «двести» и «триста», где в каждом столбце указано количество единиц для каждого наблюдения. Например, он будет производить:
onehundred = c(1,1,1,2)
twohundred = c(0,1,1,0)
threehundred = c(1,1,0,0)